我觉得可以写成where to_char(time,'yyyy-mm')='2003-03'

解决方案 »

  1.   

    呵呵,通常一样,不过实际上可以考虑一下time 〉 to_date('2003-04','yyyy-mm') 的数据多还是< to_date('2003-03','yyyy-mm')的数据多,由此多的放在sql语句前面。很多纪录的时候有用吧。(参与讨论)
      

  2.   

    第中效率高多了,如果你在oracle 中不用函数索引的话,如果是基于time 的索引,那么第二中的效率可能快几百上千倍
      

  3.   

    不对吧 ? 函数索引 是针对有没有对字段使用函数的,那样才和用不用现有的索引有关系。
    可是现在第一种方法的实质就是 time > 2003-03-01 12:00:00 and time < 2003-04-01 12:00:00
    的。
    而第二种实质同样是这样的。  
    有索引都用,没有索引都不用的。所以 两种 is same....
      

  4.   

    还有
    where time between to_date('200303','yyyymm') and to_date('200304','yyyymm')