如果我的表格中包含名为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'
答案 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')