select * from tables where to_char(a.creationdate,'yyyy-mm-dd') between '2008-01-01' and '2008-07-31'
感觉beteen应该是用来比较有大小的字段,难道这个是比较ASCII码?这样的句话查出来的结果是满足createiondate在'2008-01-01' 到'2008-07-31'
之间数据吗?晕了。

解决方案 »

  1.   

    可以这样写啊
    select * from tables where creationdate between to_date('2008-01-01','yyyy-mm-dd') and to_date('2008-07-31','yyyy-mm-dd')
      

  2.   

    是的,我一直觉的这样写select * from tables where creationdate between to_date('2008-01-01','yyyy-mm-dd') and to_date('2008-07-31','yyyy-mm-dd')
    可是今天有一个开发,这样写
    select * from tables where to_char(a.creationdate,'yyyy-mm-dd') between '2008-01-01' and '2008-07-31' 
    这两句是相等的吗?性能上会有差异吗?总感觉用to_char挺奇怪的。可能是我见的少了。有哪位大哥可以解答下,这两种方式是不是相等的。creationdate是date类型的。
      

  3.   

    你写的那个效率高,因为日期的比较和字符的比较不一样。日期2008.1.31之后是2008.2.1,字符比较就不是这样了。
    此外对col使用函数还影响查询效率。即便是有函数index,还有不如不使用函数的好。看来你比他有才。呵呵
      

  4.   

    select * from tables where to_char(a.creationdate,'yyyy-mm-dd') between '2008-01-01' and '2008-07-31' 
    这个也对,效果其实都是一样的
    如果硬是论效率的话
    应该是to_char()的那个效率高,毕竟是转换了一次,而to_date()转换了两次
      

  5.   

    两句话效果一样,但如果你的表里 creationdate字段有索引的话,最好用to_date,如果用to_char的话索引就用不上了。关于日期的比较和字符的比较 同意3楼的分析。