2009-08-26 253 views
5

如果我有一个名为myDate的日期列的表,其值为2009-08-25 09:00:09.0PL/SQL中的日期范围(Oracle)

我要选择所有的行为年08月25,从上午12时00分01秒直到下午11:59:59并没有为8月26日。难道是足够简单地使用条件:

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

我想之前选择所有的行8月25日,不包括25月我能做:

where myDate < Date '2009-08-25' 

回答

11

,如果你想进行数据全天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为“日期”类型有或没有时间同时使用。如果你没有时间处理日期,它通常存储在00:00的时间段,也就是午夜。因此,(my_date between '2009-08-25' and '2009-08-26')之间的第一个可能会选择两个整天。

通过去除26的第一第二,你保证你不会在不经意间从26

+0

什么您的26开头的意思是如果不包括 - 在你的第二个查询1/24/60/60 ,它可能有什么问题? – Saobi 2009-08-26 14:16:04

+0

26开始于00:00,所以如果你想排除所有26,你必须明确删除那一秒 – 2009-08-26 14:22:23

+0

是的,它只包含8-26 12:00:00 AM。不是一分钟后。一排正好发生在午夜的可能性很低,所以没关系? – Saobi 2009-08-26 14:29:14

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

这是真的吗? – cr0ss 2014-04-24 10:44:54

+0

他在括号前忘记了TO_DATE – 2014-10-17 12:37:09

1

选择行至8月25之间得到的一切,在上午12时00分01秒,直到11 :59:59 PM,包容,试试这个:

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')