我想在where條件中加上表中某字段日期的值大于當前系統日期,比如兩天,
和字段的日期值等于系統當前日期的后一天。就是關于兩個日期間隔天數的問題,
希望大家踴躍發言啦!

解决方案 »

  1.   

    Oracle计算时间差表达式 
    --取第几天的数据。
    select * from table where trunc(sysdate)-trunc(cr)=1; 
    select * from table where trunc(sysdate)-trunc(cr)=2; 
    select * from table where trunc(sysdate)-trunc(cr)=8; --获取两时间的相差豪秒数
    select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60 * 1000) 相差豪秒数 FROM DUAL;
    /*
    相差豪秒数
    ----------
      86401000
    1 row selected
    */--获取两时间的相差秒数
    select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60) 相差秒数 FROM DUAL;
    /*
    相差秒数
    ----------
         86401
    1 row selected
    */--获取两时间的相差分钟数
    select ceil(((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss'))) * 24 * 60)  相差分钟数 FROM DUAL;
    /*
    相差分钟数
    ----------
          1441
    1 row selected
    */--获取两时间的相差小时数
    select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24)  相差小时数 FROM DUAL;
    /*
    相差小时数
    ----------
            25
    1 row selected
    */--获取两时间的相差天数
    select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')))  相差天数 FROM DUAL;
    /*
    相差天数
    ----------
             2
    1 row selected
    */--获取两时间月份差
    select (EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd'))) * 12 + 
           EXTRACT(month FROM to_date('2008-05-01','yyyy-mm-dd')) - EXTRACT(month FROM to_date('2008-04-30','yyyy-mm-dd')) months
    from dual;
    /*
    MONTHS
    ----------
            13
    1 row selected
    */--获取两时间年份差
    select EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd')) years from dual;
    /*
    YEARS
    ----------
             1
    1 row selected
    */
      

  2.   


    直接相减
    select to_date('2009-9-16 15:14:35','YYYY-MM-DD HH24:MI:SS')-
           to_date('2009-9-14 10:14:35','YYYY-MM-DD HH24:MI:SS')
    from dual
      

  3.   

    to_char(table_date,'yyyymmdd')>to_char(sysdate,'yyyymmdd')+ 2
    to_char(table_date,'yyyymmdd')=to_char(sysdate,'yyyymmdd')- n
    如果要精确比较to_char(sysdate,'yyyy-mm-dd hh24:mm:ss'),比较前后格式一致就可以了。可以到网上看看日期函数,呵呵!
      

  4.   


    這樣會報錯呀,“OAR—01722:invalid number”
      

  5.   

    trunc(column1) = trunc(sysdate) + 2注意你的字段类型,date
      

  6.   

    select pll.need_by_date,
          to_date(pll.need_by_date,'YYYY-MM-DD')-
           to_date(sysdate,'YYYY-MM-DD')
    from apps.po_line_locations_all pll
    where to_char(pll.need_by_date,'yyyy-mm-dd')>to_char(sysdate,'yyyy-mm-dd')+ 1 
     如果不要where子句,顯示求出的時間天數就是錯的,
     如果要where字句,就會報錯。
    幫忙看看吧,非常感謝啊!!      
      

  7.   

    to_char(pll.need_by_date,'yyyy-mm-dd')>to_char(sysdate,'yyyy-mm-dd')+ 1 
    改成
    pll.need_by_date>sysdate+1
      

  8.   

    晕,不该to_date的你to_date了,不该to_char的to_char了..
    若need_by_date为字符型
    select pll.need_by_date, 
          to_date(pll.need_by_date,'YYYY-MM-DD')- 
          trunc(sysdate) 
    from apps.po_line_locations_all pll 
    where pll.need_by_date>to_char(sysdate+1,'yyyy-mm-dd')
      

  9.   

    呵呵,多謝各位,我已經知道了,謝謝wildwave!