无法获取具有日期条件的所有记录

时间:2013-05-07 07:52:24

标签: sql oracle oracle10g

我有以下sql语句,我试图获取记录,问题是即使日期匹配,我也无法获得一条记录。

SQLFiddle

SELECT distinct  vname,start_date
FROM   my_dates
where 
 start_date >= to_date('30-APR-2013','DD-MON-YYYY HH12:MI:SS AM') 
and start_date <= to_date('06-MAY-2013','DD-MON-YYYY HH12:MI:SS AM')

我的查询错误是什么?

2 个答案:

答案 0 :(得分:2)

由于您未在条件语句的TO_DATE部分中指定小时,分钟或秒,因此Oracle默认为00:00:00,因此您的语句基本上表示要查找start_date is between "30-APR-2013 00:00:00 AM" AND "06-MAY-2013 00:00:00 AM"的值。由于“06-MAY-2013 6:59:00 AM”超出此范围,因此不会在结果中返回。您可以通过以下几种方法解决此问题:

在TO_DATE语句中指定小时,分钟和秒,以将整天包含在日期范围的后端。

SELECT DISTINCT  vname,start_date
  FROM my_dates
 WHERE start_date BETWEEN TO_DATE('30-APR-2013','DD-MON-YYYY') 
                      AND TO_DATE('06-MAY-2013 11:59:59 PM','DD-MON-YYYY HH12:MI:SS AM')

或者,您可以进行计算,将第二个日期值添加23小时59分59秒,以执行与上述相同的操作。

SELECT DISTINCT  vname,start_date
  FROM my_dates
 WHERE start_date BETWEEN TO_DATE('30-APR-2013','DD-MON-YYYY') 
                      AND TO_DATE('06-MAY-2013','DD-MON-YYYY')+1-(1/24/60/60)

希望有所帮助。

答案 1 :(得分:0)

to_date('06-MAY-2013','DD-MON-YYYY HH12:MI:SS AM')将返回小于May, 06 2013 00:00:00+0000的{​​{1}}因此,您没有获得最后一行。 试试这个查询...

06-MAY-2013 6:59:00 AM','DD-MON-YYYY HH12:MI:SS AM

Sql fiddle Demo