日期之间并获得所有可能的值

时间:2014-09-29 15:48:23

标签: sql oracle

我正在使用以下查询从整个月的视图中检索所有可能的值

     select * from report2 where date_from >= TO_DATE('01-July-2014 00:00:00','DD-MM-YYYY 
     HH24:MI:SS') AND date_from < TO_DATE('31-July-2014 00:00:00','DD-MM-YYYY HH24:MI:SS')

我以为它会检测到所有这些。但是当我运行例如上限日期为2014年8月1日时,我仍然可以看到2014年7月31日的条目,如31/07/2014 00:01:00,这些条目尚未被上一个查询检索到。我怎样才能确保我会检测到所有这些?

2 个答案:

答案 0 :(得分:3)

尝试使用日期,直到下个月的黎明,当date_from以上的指数受益时。

 select * from report2 where 
     date_from >= TO_DATE('01-July-2014','DD-Month-YYYY')
 AND date_from < TO_DATE('01-August-2014','DD-Month-YYYY')

select * from report2 where TO_CHAR(date_from ,'MON-YYYY') = 'JUL-2014'

如果没有超过date_from的索引

答案 1 :(得分:1)

我建议您在Oracle中使用DATE关键字。它使这些代码更容易阅读并使用ISO标准日期格式:

select *
from report2
where date_from >= DATE '2014-07-01' and date_from < DATE '2014-08-01'

您可能会发现更容易将查询视为:

where date_from >= DATE '2014-07-01' and date_from < DATE '2014-07-31' + 1

甚至:

where date_from >= DATE '2014-07-01' and date_from < add_months(DATE '2014-07-01', 1)