Spark SQL to_timestamp函数无法生成含毫秒的时间戳问题求助
Spark SQL to_timestamp函数无法生成含毫秒的时间戳问题求助
嗨,我来帮你理清这个问题~
首先你得知道:Spark的to_timestamp其实已经正确解析了毫秒,只是默认的Timestamp类型显示格式会省略末尾的零,并且用ISO8601标准格式(带T分隔符和Z时区标识,Z代表UTC时区)来输出,这才让你误以为毫秒丢失了。
要解决你的需求——保留毫秒、去掉T和Z,只需要用date_format函数来指定你想要的输出格式就行,不用复杂的逻辑,一个简单的SELECT查询就能搞定:
SELECT date_format( to_timestamp('2009-06-12 01:07:22.024', 'yyyy-MM-dd HH:mm:ss.SSS'), 'yyyy-MM-dd HH:mm:ss.SSS' ) AS formatted_timestamp
执行这个查询后,你会得到预期的结果:2009-06-12 01:07:22.024。
补充说明几点:
T是ISO8601格式中日期和时间的分隔符,Z代表UTC时区,这是Spark对Timestamp类型的默认显示规则;- 如果你需要指定时区(比如不想用UTC),可以在
to_timestamp里加上时区参数,比如:SELECT date_format( to_timestamp('2009-06-12 01:07:22.024', 'yyyy-MM-dd HH:mm:ss.SSS', 'Asia/Shanghai'), 'yyyy-MM-dd HH:mm:ss.SSS' ) AS formatted_timestamp - 如果你想验证毫秒确实被解析了,可以用
extract函数单独提取毫秒部分:
这个查询会返回SELECT extract(millisecond FROM to_timestamp('2009-06-12 01:07:22.024', 'yyyy-MM-dd HH:mm:ss.SSS')) AS milliseconds24,证明毫秒信息是存在的。
备注:内容来源于stack exchange,提问作者AAA6
相关产品推荐
相关产品推荐

