我想查找本月的新增的数据,现在的SQL语句是:
SELECT * FROM TEST1 WHERE ((TO_CHAR(CTIME,'mm')-TO_CHAR(SYSDATE,'mm'))=0) ;可是这样有问题,如果是明年的本月再次查找时,今年本月的数据也会出来,应该如何查询呢。
呵呵,还有本周的数据

解决方案 »

  1.   

    SELECT * FROM TEST1 WHERE ((TO_CHAR(CTIME,'yyyymm')-TO_CHAR(SYSDATE,'yyyymm'))=0)
    这样应该就可以了啊
      

  2.   

    因为你开始的时候只是出查询了MM=MM的情况,但是应该是查询YYYYMM=YYYYMM的情况,所以你会查出所有月份相同的数据
    即你的语句效果如下:
    SELECT * FROM TEST1 WHERE to_char(ctime,'mm')=to_char(sysdate,'mm')
    但是实际上应该采用如下语句
    SELECT * FROM TEST1 WHERE to_char(ctime,'yyyymm')=to_char(sysdate,'yyyymm')
      

  3.   

    在where中用表达式比较会导致全表扫描,效率太低。应该这样:SELECT * 
    FROM TEST1 
    WHERE ctime >= LAST_DAY(ADD_MONTH(SYSDATE,-1))+1 
      AND ctime < LAST_DAY(SYSDATE)+1
      

  4.   

    建议这样
    SELECT * FROM TEST1 
    WHERE CTIME between to_date(to_char(sysdate,'yyyymm'),'yyyymm') and sysdate
    或(如果你不太介意效率)SELECT * FROM TEST1 
    WHERE to_char(CTIME,'yyyymm')=to_char(sysdate,'yyyymm')
      

  5.   

    如果是本月的
    select * from test1
    where ctime between trunc(sysdate,'mm') and sysdate
    如果不是本月
    select * from test1
    where ctime >=to_date('2006-01-01','yyyy-mm-dd') and
    ctime < to_date('2006-02-01','yyyy-mm-dd')