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

如何解决DD-MON-YY转YYYYMMDD时年份变为20XX的问题?

解决Oracle中两位年份解析为错误世纪的问题

这问题太常见了!你遇到的是Oracle TO_DATE函数处理两位年份时的默认行为问题——用YY格式掩码的话,Oracle会直接把两位年份补全为当前世纪,所以'97'就被解析成2097了,而不是我们期望的1997。

为什么会这样?

  • YY格式:不管输入的两位年份是多少,都使用当前世纪(比如现在是21世纪,所有两位年份都会被转成20xx)。
  • RR格式:这是Oracle专门用来处理两位年份的智能格式,它会根据当前年份的后两位来判断应该使用哪个世纪:
    • 如果输入的两位年份大于当前年份的后两位,就用上一个世纪(比如当前是2024,输入25-99会被解析为1925-1999);
    • 如果输入的两位年份小于等于当前年份的后两位,就用当前世纪(输入00-24会被解析为2000-2024)。

正确的实现方法

只需要把TO_DATE里的格式掩码从'DD-MON-YY'改成'DD-MON-RR'就行:

TO_CHAR(TO_DATE(CHD_DATE_FIRST_ACT,'DD-MON-RR'),'YYYYMMDD')

这样当输入'27-SEP-97'时,就会正确解析为1997年9月27日,输出结果就是19970927。

额外说明

如果你的业务有特殊的年份分界规则(比如希望把60-99都当成19xx,00-59当成20xx),可以考虑自定义处理逻辑,但RR格式已经能覆盖绝大多数常见的两位年份解析场景啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:54:34