我想问一下各位:
1.select * from p_team pt where pt.p_product_id=1860745 and pt.valid='Y' and 
(pt.takeoff_date like '201110%' or pt.takeoff_date like '201111%') 查询10月份和11月份的数据
201110代表:2011年10月 
查询中的takeoff_date定义的类型是INTEGER,我用的是like匹配  这样写合理吗? 2.select * from p_team pt where pt.p_product_id=1860745 and pt.valid='Y' and 
((pt.takeoff_date>=20111001 and  pt.takeoff_date<=20111031) or 
(pt.takeoff_date>=20111101 and  pt.takeoff_date<=20111130))
两条语句查询出来的数据是一致的;请问他们从各方面比较那种方法好。

解决方案 »

  1.   

    我认为是第二种方法好点,在字段takeoff_date上加上索引(不加也行),在数据量比较大的时候,就可以看出两者的区别了,第二种的速度更快。
      

  2.   

    like一般都用做字符型的变量吧,没有用过like 跟着数值型变量的。。
      

  3.   

    跟数值比确实很少用,但这样做是行的通的;oracle中like 的匹配规则是怎样的?有研究的朋友吗。
    我测过了第一种方法执行时间是:0.234 secondes 第二种是:0.219 secondes  18条数据 证明了第二中写法速度快了点。
    但第一种的写法简单些,如果是大家在用的时候;会选择哪种呢?
      

  4.   

    一般不用LIKE,
    一般用第二种。
    很少有把日期做LIKE的。
      

  5.   

    很明确是第二种快,如果要是数据量很大就有体现了,因为第一种执行过程中需要隐式转换,实际执行的的语句是1.select * from p_team pt where pt.p_product_id=1860745 and pt.valid='Y' and  
    (to_char(pt.takeoff_date) like '201110%' or to_char(pt.takeoff_date) like '201111%')
    所以用第一种的话最好改成varchar2的。
      

  6.   

    6楼分析的有道理;其实不改成varchar2也行的;用integer表示更好,