Spark中如何将带'T'的字符串转为Timestamp且去除毫秒保留格式?
解决Timestamp类型转换后无毫秒显示的问题
第一步:正确完成字符串到Timestamp的转换
你之前因为格式参数没包含'T'导致转换出null,解决这个问题很简单,调用to_timestamp时必须匹配原字符串的格式:
-- 示例转换语句 SELECT to_timestamp('2022-03-15T01:46:32', 'yyyy-MM-dd"T"HH:mm:ss') AS converted_ts;
这里格式字符串里的"T"要和原字符串的分隔符完全对应,这样就能成功得到Timestamp类型的结果。
第二步:截断毫秒,保留Timestamp类型
Timestamp本身是带时间精度的,默认会显示毫秒位(即使原数据没有)。要去掉毫秒同时保持Timestamp类型,直接用时间截断函数把精度控制到秒级即可:
-- 截断到秒级,去除毫秒 SELECT date_trunc('second', to_timestamp('2022-03-15T01:46:32', 'yyyy-MM-dd"T"HH:mm:ss')) AS no_millisecond_ts;
date_trunc('second', ...)会把Timestamp的毫秒部分置为0,返回的仍然是Timestamp类型,此时显示出来就是yyyy-MM-dd HH:mm:ss的格式,不会带毫秒。
如果是在其他SQL方言(比如Oracle)中,可以用TRUNC(your_timestamp_column, 'SS')来实现同样的效果,核心都是截断时间精度到秒,同时保留Timestamp类型。
内容的提问来源于stack exchange,提问作者j stevenage
相关产品推荐
相关产品推荐

