我的功能中有如下查询。我需要根据a.submit_date
进行过滤SELECT mail_id , mail_async, mail_priority FROM glms_mail_sys_mail_store a
WHERE
--(TO_DATE(a.submit_date,'dd-MM-yyyy HH:mm') >= '14-06-2012 18:30')
--AND (TO_DATE(a.submit_date,'dd-MM-yyyy HH:mm') <= '15-06-2012 18:50')
(TO_DATE(TO_CHAR(a.submit_date,'dd-MM-yyyy HH:mm'),'dd-MM-yyyy HH:mm') >= '14-06-2012 18:30')
AND (TO_DATE(TO_CHAR(a.submit_date,'dd-MM-yyyy HH:mm'),'dd-MM-yyyy HH:mm') <= '15-06-2012 18:30')
在我的数据库中,a.submit_date的值为'14 -06-2012 20:30'
但它投掷无效的月份......任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:9)
首先,请尝试以下操作,它有效:
SELECT TO_DATE('14-06-2012 20:30','dd-MM-yyyy HH24:MI') FROM dual
然后,您需要将不等式的右侧转换为日期。
a.submit_date >= TO_DATE('14-06-2012 18:30','dd-MM-yyyy HH24:MI') AND
a.submit_date <= TO_DATE('15-06-2012 18:50','dd-MM-yyyy HH24:MI')
如果您想要更清洁一点,请改用BETWEEN
:
a.submit_date BETWEEN
TO_DATE('14-06-2012 18:30','dd-MM-yyyy HH24:MI') AND
TO_DATE('15-06-2012 18:50','dd-MM-yyyy HH24:MI')
修改强>
这是一个完整的例子:
CREATE TABLE foo (submit_date DATE);
INSERT INTO foo VALUES (to_date('14-06-2012 20:30','dd-MM-yyyy HH24:MI'));
INSERT INTO foo VALUES (to_date('14-07-2012 20:30','dd-MM-yyyy HH24:MI'));
SELECT * FROM foo a
WHERE
a.submit_date BETWEEN
TO_DATE('14-06-2012 18:30','dd-MM-yyyy HH24:MI') AND
TO_DATE('15-06-2012 18:50','dd-MM-yyyy HH24:MI')
输出:
SUBMIT_DATE
1 6/14/2012 8:30:00 PM