Oracle日期列更新:需将'01-DEC-99'识别为9999而非1999
解决Oracle日期更新为9999年的问题
要让Oracle将日期识别为9999年12月1日,避免隐式转换导致的年份映射错误,你可以通过以下几种方式修改脚本:
方法1:使用完整年份+显式日期转换
直接指定四位年份,通过TO_DATE函数明确格式,彻底消除歧义:
update table_name set column_name = TO_DATE('01-DEC-9999', 'DD-MON-YYYY') where condition;
注:如果你的会话NLS_DATE_LANGUAGE不是英文,需额外指定语言参数确保月份缩写被正确识别,例如:TO_DATE('01-DEC-9999', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH')
方法2:使用标准日期字面量
Oracle支持ISO标准的日期字面量写法,无需依赖会话日期格式设置,简洁可靠:
update table_name set column_name = DATE '9999-12-01' where condition;
原脚本识别为1999年的原因
Oracle隐式日期转换默认遵循RR格式规则:两位年份中,00-49会映射到2000-2049,50-99会映射到1950-1999,因此'99'被解析为1999年。显式指定完整年份或使用标准字面量可规避该问题。
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

