因为您没有在条件语句的 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)
希望有帮助。