Impala中将含AM/PM的String列转换为Timestamp的方法咨询
Impala字符串时间转Timestamp类型解决方案
1、带AM/PM标识的字符串转Timestamp
转换失败的核心原因是没有匹配对应12小时制+AM/PM标识的格式模板,Impala的to_timestamp()函数支持自定义格式映射,使用dd-MMM-yyyy hh:mm a作为格式模板即可完成转换,其中:
dd:两位天数MMM:英文缩写月份yyyy:四位年份hh:12小时制的小时数mm:分钟数a:匹配AM/PM标识
参考示例:
-- 测试转换语句 SELECT to_timestamp('31-Oct-2016 12:00 AM', 'dd-MMM-yyyy hh:mm a') AS am_timestamp, to_timestamp('31-May-2015 12:00 PM', 'dd-MMM-yyyy hh:mm a') AS pm_timestamp;
如果遇到月份缩写识别异常,可先在当前会话执行set locale = 'en_US'; 再执行转换语句。
2、无AM/PM标识的字符串转Timestamp
该类字符串默认按24小时制处理,使用dd-MMM-yyyy HH:mm作为格式模板即可,其中HH代表24小时制的小时数。
参考示例:
-- 测试转换语句 SELECT to_timestamp('31-Oct-2016 12:00', 'dd-MMM-yyyy HH:mm') AS result_timestamp;
注意:如果你的无标识字符串实际为12小时制,需要先自行补全AM/PM标识后再使用第一种方案转换,避免12点时段的时间识别错误。
内容的提问来源于stack exchange,提问作者Shanti
相关产品推荐
相关产品推荐

