Oracle:为什么to_date()在格式字符串中有4位数时接受2位数年份? - 以及如何强制执行4位数字?

ser*_*ers 0 oracle

我想检查一个正确的日期.(我们不要谈论这个事实,请将日期存储在varchar中......)

日期存储类似于DDMMYYYY,因此例如24031950是正确的日期.240319不是.

所以我这样做,当通话工作时,这是一个正确的日期:

select to_date('24031950','DDMMYYYY') from dual;
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这也没有返回错误:

select to_date('240319','DDMMYYYY') from dual (why?);
Run Code Online (Sandbox Code Playgroud)

但有趣的是,这个不起作用:

select to_date('190324','YYYYMMDD') from dual;
Run Code Online (Sandbox Code Playgroud)

那么,如何使用给定的格式掩码强制执行4位数的检查?

谢谢!

Mat*_*Mat 5

引用文档:

Oracle数据库可以灵活地将字符串转换为日期.[...]

我相信你所看到的灵活性.您可以使用fx修改器将其关闭:

FX:需要字符数据和格式模型之间的精确匹配

select to_date('240319','fxDDMMYYYY') from dual;
Run Code Online (Sandbox Code Playgroud)

出现ORA-01862错误.