Я не получаю данные между двумя годами, ниже между условиями
to_char(Wfc.APPLYDTM,'MM/DD/YYYY') between /11/2019' and ༽/10/2020'
но я получаю данные между '12/11/2019' и '12/31/2019' & '01 / 11/2020 'и '01 / 01/2020' для этих дат, но не между двумя разными годами.
Пожалуйста помоги
Всего 3 ответа
Попробуйте использовать TO_DATE
вместо TO_CHAR
, а затем сравните с действительными литералами даты Oracle:
SELECT *
FROM Wfc
WHERE TO_DATE(APPLYDTM, 'MM/DD/YYYY') BETWEEN date -12-11' AND date -01-10'
Обратите внимание, что если APPLYDTM
уже является датой, вам не нужно вызывать TO_DATE
. Нет смысла преобразовывать ваши данные в символы, если вы собираетесь работать с ними как с датой.
Вы должны преобразовать свои данные в Date
чтобы иметь возможность сравнивать правильно.
Основная идея заключается в том, что вы должны сравнивать значение date
вместо string
значения.
to_date(Wfc.APPLYDTM,'MM/dd/yyyy') between to_date(/11/2019','MM/dd/yyyy') and to_date(༽/10/2020','MM/dd/yyyy')
Читайте здесь для более подробной информации.
Не конвертируйте значения даты / времени в строки! Используйте встроенный функционал.
Ваша логика проще всего выражается как:
Wfc.APPLYDTMbetween >= DATE -12-11' AND
Wfc.APPLYDTMbetween < DATE -01-11'
Обратите внимание, что константы даты предоставляются с использованием ключевого слова DATE
. Это предположительно ISO 8601 стандартных форматов даты (к счастью!).
Также обратите внимание на использование >=
и <
вместо BETWEEN
. Тип данных date
в Oracle может включать компонент времени, даже если вы не видите его при запросе к таблице. Это гарантирует, что все даты / время включены в диапазон.
В качестве дополнительного преимущества можно использовать индекс для (APPLYDTMbetween)
. Использование функции обычно исключает использование индекса, если только вы не определили индекс на основе функции.