日期:2014-05-17  浏览次数:21064 次

为什么明显错误的SQL语句竟然能正确执行?
select * from tbl_prd_suplr t where t.reg_dat > to_date('20120203', 'yyyy-mm-dd')

这句SQL语句的where条件明显是错误的,
因为“20120203”并不符合“yyyy-mm-dd”的格式,
但是to_date函数竟然不报错,能够正常执行,而且执行结果还是对的!

我还试过to_date('20120203', 'yyyy/mm/dd'),也能正常执行,
但是to_date('2012-02-03', 'yyyy/mm/dd')就会出错。

这是怎么一回事?to_date函数这么智能了?我Out了?

我用的是Oracle 11g

------解决方案--------------------
数据库默认的下面可以转换:
select to_date('20120203', 'yyyy-mm-dd') from dual;

但如果用:to_date('2012-02-03', 'yyyy/mm/dd')
数据库则会判断 -与/格式不一致。
------解决方案--------------------
to_date('20120203', 'yyyy-mm-dd') 这个肯定没问题 都是对应的8位 右没符号转换到有符号可以 

但是o_date('2012-02-03', 'yyyy/mm/dd') -和/不一致 肯定会报错 可以先转换成yyyymmdd
 

------解决方案--------------------
学习了,原来还真不知道有这回事。