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

为什么不使用to_date()?
公司的开发规范手册上面写着:

SQL 语句规范:不要在SQL语句里面使用to_date函数,应该通过传入date/time类型参数的方法来实现!也就是说在SQL语句里面看到to_date函数是不符合要求的。

这样的话,如果查询两个时间段之间的数据,例如下面这句,应该怎么写查询语句
between to_date( '2007-10-22 20:20:20 ','yyyy-MM-DD hh-mm-ss') and to_date( '2007-10-22 22:22:22','yyyy-MM-DD hh-mm-ss')

还有我不知道为什么不要用to_date(),是效率方面的原因吗?

------解决方案--------------------
我目前使用的数据库,在sql语句的时候,如果碰到需要日期的地方一定得加to_date()进行转换,不知道为什么,不加的话语句就会出现错误。
------解决方案--------------------
像hibernate等都支持直接日期类型的映射,直接java的日期类型就可以使用,确实不建议使用字符串进行处理,
这种代码在不同的国家可以就无法使用了,而直接使用date类型就没有这种问题
------解决方案--------------------
to_date应该没什么影响吧?有些东西不加to_date似乎无法处理。
------解决方案--------------------
sql的where条件中的值使用传参数的方式是一个好习惯,这样的sql效率高。
------解决方案--------------------
你误解了公司的开发规范了。

公司规范的意思是说在高层语言如java、c#等中调用sql的时候不能在sql中出现to_date,而是通过直接传入date类型来进行查询。

类似 

date a,b= ....

PrepareStatment s = 'select * from test where mydatecolumn between ? and ?'

s.set(1) = a;
s.set(2) = b;

而不是使用s = 'select * from test where mydatecolumn between to_date( '2007-10-22 20:20:20 ', 'yyyy-MM-DD hh-mm-ss ') and to_date( '2007-10-22 22:22:22 ', 'yyyy-MM-DD hh-mm-ss ')'

因为这样会出现数据的不一致,比如出现不符合要求的日期:2007-22-22而抛出异常。按照公司规范就不会有问题了。


ps:
在直接使用sql访问数据库的时候肯定要用to_date的。
------解决方案--------------------
楼上的理解或许是正确的