Невозможно получить данные между двумя годами

Я не получаю данные между двумя годами, ниже между условиями

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) . Использование функции обычно исключает использование индекса, если только вы не определили индекс на основе функции.


Есть идеи?

10000