2012-06-14 4 views
1

У меня был запрос, как показано ниже в моей функции. В том, что мне нужно фильтровать на основе a.submit_dateКак фильтровать на основе даты в Oracle SQL

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') 

В Мой DB a.submit_date имел значение как '14 -06-2012 20:30'

Но его метания Invalid месяц .. Может ли кто-нибудь помочь исправить это?

+0

использование - 'dd-MM-yyyy HH24: mi' –

+1

@rs - Нет, ему нужен HH24, а не HH. – dcp

+1

да я понял и обновил его –

ответ

6

Во-первых, попробуйте это ниже, она работает:

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') 

EDIT:

Вот полный пример:

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 
+0

Спасибо всем за ответы на ur .. но этот запрос не возвращает никаких строк, так как у меня была строка с a.submit_date как '14 -06-2012 20:30 ' –

+1

@java Programmer - Да, вы хотите используйте submit_date вместо to_date для левой части неравенства. Я обновил ответ и включил полный рабочий пример. Надеюсь, поможет. – dcp

+1

спасибо большое dcp ... grt ответ .. получил o/p .. –

Смежные вопросы