我有以下sql语句,我试图获取记录,问题是即使日期匹配,我也无法获得一条记录。
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')
我的查询错误是什么?
答案 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