#oracle
#Oracle
Вопрос:
Я фильтрую базу данных по 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')
она возвращает мне нулевые строки, но когда я проверил свою таблицу in, у меня есть
«3/11/2019 17:00:00 вечера» и «3/11/2019 7: 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. Я предпочитаю избегать использования формата am / pm .. просто используйте формат 24 часа .. это устраняет всю неопределенность 🙂 to_date(‘3/11/2019 12:00:00′,’ ММ / ДД / ГГГГ ЧЧ24: MI: SS’) и to_date(‘3/11/2019 23:59:59′,’ ММ / ДД / ГГГГ ЧЧ24: MI: SS’) попробуйте это и посмотрите, работает ли это лучше?
Ответ №1:
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
Последняя версия работает, потому что временная часть a по DATE
умолчанию равна 00:00:00
, если она не указана, и, вычитая одну секунду из полуночи, вы получаете 23:59:59
.
Желаю удачи.