PL / SQL中的日期范围(Oracle)

时间:2009-08-26 14:10:03

标签: oracle plsql

如果我的表格中包含名为myDate的日期列,其值为2009-08-25 09:00:09.0

我想选择 8月25日的所有行,从 12:00:01 AM 直到 11:59:59 PM 和NOTHING对于 8月26日。仅仅使用条件就足够了:

where myDate between Date '2009-08-25' and Date '2009-08-26'

我想在 8月25日之前选择所有行,不包括8月25日。我可以这样做:

where myDate < Date '2009-08-25'

4 个答案:

答案 0 :(得分:12)

如果您想要全天25的数据并且不包括所有26,那么您需要删除26的第一秒:

where myDate >= Date '2009-08-25' and myDate < Date '2009-08-26'

where myDate between Date '2009-08-25' and Date '2009-08-26' - interval '1' second

更新 - 稍微精确一点:在Oracle中,DATE数据类型既可用于带有或不带时间的'Date'类型。如果您在没有时间的情况下处理日期,通常会将其存储在00:00时间段,即午夜。因此,(my_date between '2009-08-25' and '2009-08-26')之间的第一个可能会选择两整天。

通过删除26的第一秒,您可以确保不会无意中从26中选择行。

答案 1 :(得分:2)

要在8月25日上午12:00:01至晚上11:59:59之间获取所有内容,请尝试以下操作:

  Where myDate Between to_Date('yyyymmddhh24miss', '20090825000001') 
                  And  to_Date('yyyymmddhh24miss', '20090825235959') 

(你为什么不排除25日午夜?第一秒(00:00:00)也是25日的一部分......)

要在8月25日之前获取所有内容,请尝试以下操作:

Where myDate < to_Date('yyyymmdd', '20090825')

答案 2 :(得分:0)

今年截止,但你得到了我的要点:

SELECT (select trunc(sysdate - (SELECT TRUNC(SYSDATE) -
                                       add_months(trunc(sysdate, 'YEAR'), -24)
                                  FROM DUAL))from DUAL)+ (ROWNUM - 1) effective_date
                                  FROM DUAL
                                  CONNECT BY LEVEL <= (SELECT TRUNC(SYSDATE) - add_months(trunc(sysdate, 'YEAR'), -24)
                                  FROM DUAL);

答案 3 :(得分:-2)

SELECT   *
FROM   TABLE
 WHERE   myDate BETWEEN myDate  ('08/25/2009', 'MM/DD/YYYY')
                         AND  myDate  ('08/26/2009', 'MM/DD/YYYY')