1

関数に以下のようなクエリがありました。その中で、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')

My DBでは、a.submit_dateの値は「14-06-201220:30」でした。

しかし、そのスローする無効な月...誰かがこれを修正するのを助けることができますか?

4

1 に答える 1

11

まず、以下でこれを試してください、それは機能します:

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
于 2012-06-14T19:20:18.303 に答える