Oracle如何将带时区的ISO时间戳字符串转换为指定日期格式
错误原因
你写的SQL无法识别主要有三个问题:
- 格式掩码中的常量字符
T没有用双引号包裹,Oracle会将其识别为格式标识符而非普通字符,匹配失败 - 原时间戳用的是24小时制的时间,你用了12小时制的格式符
hh,应该替换为hh24 - 原字符串包含毫秒部分
.075和时区偏移+02:00,你的格式掩码没有覆盖这两部分,匹配不完整
解决方法
写法1:用to_timestamp匹配全格式(忽略时区)
如果不需要处理时区偏移,直接补全格式掩码即可:
select to_char( to_timestamp('2021-09-07T18:24:25.075+02:00', 'yyyy-mm-dd"T"hh24:mi:ss.ff3tzh:tzm'), 'dd.mm.yyyy hh24.mi.ss' ) as format_time from dual;
写法2:用to_timestamp_tz保留时区信息转换
如果需要严格按输入的时区转换,用时区时间戳函数更稳妥:
select to_char( to_timestamp_tz('2021-09-07T18:24:25.075+02:00', 'yyyy-mm-dd"T"hh24:mi:ss.ff3tzh:tzm'), 'dd.mm.yyyy hh24.mi.ss' ) as format_time from dual;
格式符说明
"T":双引号包裹表示是普通常量字符,不做格式解析hh24:24小时制的小时占位符ff3:3位精度的毫秒占位符,对应原字符串的.075tzh:tzm:时区小时和时区分钟的占位符,对应原字符串的+02:00
内容的提问来源于stack exchange,提问作者bullfighter
相关产品推荐
相关产品推荐

