You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle字符串转Date转Timestamp时1900年变为2000年如何解决

转换为Timestamp示意图

你出现年份转换错误的核心原因是两点:

  • 多余的多层嵌套转换:先截取字符串前缀转DATE、再转字符串、再转TIMESTAMP的冗余流程,很容易出现格式匹配偏差,同时丢失了原字符串的时分秒、毫秒信息
  • RRRR格式符的自动偏移逻辑:RRRR会根据当前年份自动推断2位年份的所属世纪,部分场景下会把19xx的年份误判为20xx,4位固定年份直接用YYYY更稳妥

你不需要做字符串截取,Oracle原生支持匹配ISO 8601格式的时间字符串,直接给TO_TIMESTAMP指定对应格式即可,写法如下:

SELECT TO_TIMESTAMP('1900-01-01T13:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z') 
FROM dual;

格式符说明:

  • 用双引号包裹T和Z,Oracle会将其识别为固定占位符,不需要修改原字符串就能直接匹配
  • YYYY表示4位完整年份,不会做自动世纪偏移,完全保留原字符串的年份信息
  • FF3匹配3位精度的毫秒部分,对应你字符串末尾的.000格式

如果需要保留时区信息,可以直接转换为带时区的TIMESTAMP类型:

SELECT TO_TIMESTAMP_TZ('1900-01-01T13:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') 
FROM dual;

内容的提问来源于stack exchange,提问作者jolly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:15:05