1、如果只用toDateTime,你需要拼接成一个完全按照YYYY-MM hh:mm:ss格式的字符串给它,否则,它会当你是一个从1970年偏移的毫秒去转换
SELECT 20191231235959 as expire_date, toDateTime(20191231235959),
concat(toString(floor(20191231235959/10000000000)), '-',
toString(floor((20191231235959%10000000000)/100000000)), '-',
toString(floor((20191231235959%100000000)/1000000)), ' ',
toString(floor((20191231235959%1000000)/10000)), ':',
toString(floor((20191231235959%10000)/100)), ':',
toString(floor((20191231235959%10000)/100))) as str, toDateTime(str);
2、也可以这样拼接:
toDateTime(concat(substring(toString(watch_end_time), 1, 4), '-',
substring(toString(watch_end_time), 5, 2),
'-', substring(toString(watch_end_time), 7, 2), '
', substring(toString(watch_end_time), 9, 2),
':', substring(toString(watch_end_time), 11,
2), ':', substring(toString(watch_end_time), 13, 2))) as wet
3、但你可以使用一个更强大的函数:
parseDateTimeBestEffort(toString(20191201000407)) as wet
结果:
wet |
---|
2019-12-01 00:04:07 |
附相关文档:
parseDateTimeBestEffort
将数字类型参数解析为Date或DateTime类型。 与toDate和toDateTime不同,parseDateTimeBestEffort可以进行更复杂的日期格式。 有关详细信息,请参阅链接:复杂日期格式。
parseDateTimeBestEffortOrNull
与parseDateTimeBestEffort相同,但它遇到无法处理的日期格式时返回null。
parseDateTimeBestEffortOrZero
与parseDateTimeBestEffort相同,但它遇到无法处理的日期格式时返回零Date或零DateTime。