用PL/SQL Developer查询某个时间段的数据
WHERE tDate >= to_date('2011-02-01', 'yyyy-MM-dd') AND tDate <= to_date('2011-02-28', 'yyyy-MM-dd')
和用 WHERE tDate >= to_date('2011-02-01', 'yyyy-MM-dd') AND tDate < to_date('2011-03-01', 'yyyy-MM-dd')
是要查询2月份数据,可查询出来不一样,第一个查不出2-28那天数据,为什么日期不能“等于”呢?原因是什么?还是就这么规定的?

解决方案 »

  1.   


    有可能
    除非你  tDate字段格式不是'yyyy-mm-dd' 而是还有小时分钟秒  所以才不满足
     to_date('2011-02-28', 'yyyy-MM-dd') 得值是小时分钟秒都是0
     即:2011-02-28 00:00:00
    因此你的数据肯定不等于2011-02-28 00:00:00
      

  2.   

    因为你把时间截取了 
    tDate <= to_date('2011-02-28', 'yyyy-MM-dd')
    实际数据是2011-02-28 13:34:34这样的格式 你用等号当然没数据了
      

  3.   

    --拿个例子来说明
    --我插入到数据库的时间是 2011-03-01 12:22:22
    -- 如果用hiredate=to_date('2011-03-01','yyyy-mm-dd'); 肯定是不符合条件的
    --因为2011-03-01 12:22:22 与2011-03-01并不相等  1  insert into emp (empno,ename,hiredate)
      2  values
      3* (8888,'aspen',to_date('2011-03-01 12:22:22','yyyy-mm-dd hh24:mi:ss'))
    scott@YPCOST> /1 row created.scott@YPCOST> commit;Commit complete.scott@YPCOST> select * from emp where hiredate=to_date('2011-03-01','yyyy-mm-dd');no rows selectedscott@YPCOST> select * from emp where hiredate>to_date('2011-03-01','yyyy-mm-dd');     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
          8888 aspen                           2011-03-01
      

  4.   

    SELECT *
      FROM TEST_TAB
     WHERE TDATE >= TO_DATE('2011-02-01', 'yyyy-MM-dd')
       AND TDATE <= TO_DATE('2011-02-28 23:59:59', 'yyyy-MM-dd HH24:MI:SS');SQL> SELECT to_char(TO_DATE('2011-02-28', 'yyyy-MM-dd'),'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
     
    TO_CHAR(TO_DATE('2011-02-28','
    ------------------------------
    2011-02-28 00:00:00
    日期比较也可以用等于的,但是因为TO_DATE('2011-02-28', 'yyyy-MM-dd')其实是28号凌晨0点,所以不会包含28号的时间段的。修改成上面的就可以了。