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-8月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');它检查未找到的月份,并返回错误(正确解析!)
为什么格式说明符不对所提供的日期值执行严格检查?
谢谢。
发布于 2015-09-17 08:13:50
这似乎是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')https://stackoverflow.com/questions/32625022
复制相似问题