Невозможно получить данные между двумя годами - PullRequest
0 голосов
/ 13 января 2020

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

to_char(Wfc.APPLYDTM,'MM/DD/YYYY') between '12/11/2019' and '01/10/2020'

, но я получаю данные между '12/11/2019' и '12/31/2019' & '01 / 11/2020 'и '01 / 01/2020' для этих дат, но не между двумя разными годами.

Пожалуйста, помогите

Ответы [ 3 ]

3 голосов
/ 13 января 2020

Попробуйте использовать TO_DATE вместо TO_CHAR, а затем сравнить с действительными Oracle литералами даты:

SELECT *
FROM Wfc
WHERE TO_DATE(APPLYDTM, 'MM/DD/YYYY') BETWEEN date '2019-12-11' AND date '2019-01-10';

Обратите внимание, что если APPLYDTM уже является датой, то вы не нужно позвонить TO_DATE на это. Нет смысла преобразовывать ваши данные в символ, если вы собираетесь работать с ними как с датой.

0 голосов
/ 13 января 2020

Не конвертируйте значения даты / времени в строки! Используйте встроенный функционал.

Ваш лог c проще всего выражается в виде:

Wfc.APPLYDTMbetween >= DATE '2019-12-11' AND
Wfc.APPLYDTMbetween < DATE '2020-01-11'

Обратите внимание, что константы даты предоставляются с использованием ключевого слова DATE. Это предполагаемые форматы даты стандарта ISO 8601 (к счастью!).

Также обратите внимание на использование >= и < вместо BETWEEN. Тип данных date в Oracle может включать компонент времени - даже если вы не видите его при запросе к таблице. Это гарантирует, что все даты / время включены в диапазон.

В качестве дополнительного преимущества можно использовать индекс для (APPLYDTMbetween). Использование функции обычно исключает использование индекса, если только вы не определили индекс на основе функции.

0 голосов
/ 13 января 2020

Вы должны преобразовать свои данные в Date, чтобы иметь возможность правильно сравнивать.

Основная идея заключается в том, что вы должны сравнивать значение date вместо string значения.

to_date(Wfc.APPLYDTM,'MM/dd/yyyy') between to_date('12/11/2019','MM/dd/yyyy') and to_date('01/10/2020','MM/dd/yyyy')

Читать здесь для более подробной информации.

...