PrestoSQL如何正确解析带+XX时区后缀的datetime格式字符串
Presto parse_datetime解析带单数字时区偏移时间的正确方案
错误原因
- 格式串中
.SSSSSS(微秒占位符)的位置与输入结构不匹配:输入字符串秒字段之后直接是时区偏移+07/+00,没有.开头的毫秒部分,解析到秒字段后预期匹配.但实际匹配到+,直接抛出格式错误 - 时区偏移占位符选择错误:
ZZ仅支持+0700/-0800这类四位数字的偏移格式,无法匹配你输入中+07/+00的单小时偏移结构 - 额外注意:原写法中
YYYY是周历纪年占位符,仅用于周统计场景,常规时间解析建议用yyyy代表公历年,避免跨年周出现年份解析偏差
正确写法
无兼容需求(所有数据都没有毫秒部分)
直接使用如下格式即可:
parse_datetime(row.created_at, 'yyyy-MM-dd HH:mm:ssX')
兼容带毫秒的混合数据
如果你的数据中部分值带微秒、部分不带,可以用可选段语法兼容两种格式:
parse_datetime(row.created_at, 'yyyy-MM-dd HH:mm:ss[.SSSSSS]X')
扩展说明
X作为时区偏移占位符,支持匹配多种常见偏移格式:
- 单小时偏移:
+07、-05、+00 - 小时+分钟偏移:
+0730、-0430 - UTC标识:
Z
如果需要将解析后的timestamp转换为指定时区的时间,可以搭配AT TIME ZONE语法使用,示例:
-- 解析后转换为北京时间 parse_datetime(row.created_at, 'yyyy-MM-dd HH:mm:ssX') AT TIME ZONE 'Asia/Shanghai'
内容的提问来源于stack exchange,提问作者Yituo
相关产品推荐
相关产品推荐

