公司的开发规范手册上面写着: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(),是效率方面的原因吗?

解决方案 »

  1.   

    我目前使用的数据库,在sql语句的时候,如果碰到需要日期的地方一定得加to_date()进行转换,不知道为什么,不加的话语句就会出现错误。
      

  2.   

    像hibernate等都支持直接日期类型的映射,直接java的日期类型就可以使用,确实不建议使用字符串进行处理,
    这种代码在不同的国家可以就无法使用了,而直接使用date类型就没有这种问题
      

  3.   

    to_date应该没什么影响吧?有些东西不加to_date似乎无法处理。
      

  4.   

    sql的where条件中的值使用传参数的方式是一个好习惯,这样的sql效率高。
      

  5.   

    你误解了公司的开发规范了。公司规范的意思是说在高层语言如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的。