Spark SQL中如何将DDMMMYYYY HH:mm:ss:ssssss格式的时间戳转换为yyyy-MM-dd格式
解决Spark SQL中自定义时间戳转yyyy-MM-dd日期的问题
你的问题出在没有指定时间戳的自定义格式——Spark的to_date函数默认只识别标准日期格式(比如yyyy-MM-dd或ISO格式),而你的输入是ddMMMyyyy:HH:mm:ss.SSSSSS这种非标准格式,直接调用自然会返回null。
正确实现方法
使用to_date函数的第二个参数,明确指定输入字符串的格式即可:
select to_date('15APR2021:03:53:54.297856', 'ddMMMyyyy:HH:mm:ss.SSSSSS') as formatted_date;
执行后会得到预期结果:
+--------------+ |formatted_date| +--------------+ | 2021-04-15| +--------------+
格式符说明
这里用到的关键格式符对应含义:
dd: 两位数字的日期(比如示例中的15)MMM: 三位英文月份缩写(比如APR对应4月,Spark会自动识别大小写)yyyy: 四位数字的年份(比如示例中的2021)HH:mm:ss.SSSSSS: 时间部分(小时:分钟:秒.微秒),虽然to_date最终只提取日期,但必须完整匹配输入字符串的结构,否则解析会失败。
批量处理表字段示例
如果是处理表中的时间戳字段,写法类似:
select to_date(timestamp_column, 'ddMMMyyyy:HH:mm:ss.SSSSSS') as date_column from your_table;
这样就能把所有同格式的时间戳批量转换成yyyy-MM-dd格式的日期。
内容的提问来源于stack exchange,提问作者Manoj Kumar G
相关产品推荐
相关产品推荐

