Функция ToDate не возвращается должным образом - PullRequest
0 голосов
/ 27 марта 2019

Я фильтрую базу данных по ETD_Date, который является типом даты. И мой фильтр

AND OMB.ETD_DATE BETWEEN TO_DATE('3/11/2019 12:00:00','MM/DD/YYYY 
  HH:MI:SS AM') AND TO_DATE('3/11/2019 11:59:59','MM/DD/YYYY HH:MI:SS PM')

это возвращает мне ноль строк, но когда я проверил свою таблицу, у меня есть «11.03.2009 17:00:00» и «11.03.2009 19:45:00». Я пытался обменять AM / PM на

 OMB.ETD_DATE BETWEEN TO_DATE('3/11/2019 12:00:00','MM/DD/YYYY HH:MI:SS PM') AND TO_DATE('3/11/2019 11:59:59','MM/DD/YYYY HH:MI:SS AM') 

купить не получится. каким должен быть мой фильтр, чтобы получить ожидаемый результат.

1 Ответ

1 голос
/ 28 марта 2019

AM или PM должны также появиться в строке даты. Как в

AND OMB.ETD_DATE BETWEEN TO_DATE('3/11/2019 12:00:00 AM','MM/DD/YYYY HH:MI:SS AM')
                     AND TO_DATE('3/11/2019 11:59:59 PM','MM/DD/YYYY HH:MI:SS PM')

Совет, приведенный выше, чтобы привыкнуть к использованию 24-часовых часов, также следует предпринять. Так что попробуйте:

AND OMB.ETD_DATE BETWEEN TO_DATE('3/11/2019 00:00:00','MM/DD/YYYY HH24:MI:SS')
                     AND TO_DATE('3/11/2019 23:59:59','MM/DD/YYYY HH24:MI:SS')

Или вы можете просто игнорировать время по большей части:

AND OMB.ETD_DATE BETWEEN TO_DATE('3/11/2019','MM/DD/YYYY')
                     AND TO_DATE('3/12/2019','MM/DD/YYYY') - INTERVAL '1' SECOND

Последняя версия работает, потому что временная часть DATE по умолчанию равна 00:00:00, если она не указана, и вычитание одной секунды из полуночи дает вам 23:59:59.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...