返回结果时无法识别日期格式

Date format not recognized while returning results

select * from table where trunc(value1)=to_date('25-AUG-15','DD-MON-YY');

这很好

select * from table where trunc(value1)=to_date('25-AUG-15','DD-Mon-YY');

虽然有效值应该是 25-Aug-15

,但它也返回了

即使这样也行得通,

select * from table where trunc(value1)=to_date('25/AUG/15','DD-MON-YY');

返回结果

还有这个,

 select * from table where trunc(value1) = to_date('25-AUG-15', 'DD-MM-YY');

返回结果

但这很有效

 select * from table where trunc(value1) = to_date('25-AUG-15','MMDDYY');

它会检查没有找到的月份和 returns 错误(解析得很好!!!)

为什么格式说明符没有对提供的日期值执行严格检查?

谢谢。

这似乎是 Oracle 试图为您提供可靠的帮助,并使将日期解析为合理的内容变得容易。我找不到任何文档来支持这一点,但不仅格式掩码不区分大小写,而且看起来任何非字母数字字符序列都不是出现在输入字符串或格式掩码中的控制字符被视为必需的通配符,因此从 Oracle 的角度来看:

TO_DATE('17!!!SEP£££15', 'DD$$$MON***YY')

等同于:

TO_DATE('170915', 'DDMONYY')

如果您输入的通配符的数量和位置与格式掩码的不匹配,您将得到一个与它正在寻找的下一个标记相关的异常:

TO_DATE('17!!!!SEP-15', 'DD-MON-YY')

ORA-01843: not a valid month

但是,当您查看格式掩码中的通配符的解释方式时,它会变得更加奇怪。似乎在标记之间,任何非字母数字字符序列都被视为单个 但可选的 通配符,例如:

TO_DATE('17-SEP-15','DD----------------MON-YY')

等同于:

TO_DATE('17-SEP-15','DD-MON-YY')

并且由于格式掩码中的通配符是可选的,也具有相同的效果:

 TO_DATE('17-SEP-15','DD-MON-YY')