Кажется, это работает как ожидалось. Рассмотрите эти условия в вашем предложении WHERE
:
AND (
To_date(pipay.received_date, 'DD/MM/YYYY') BETWEEN
To_date('01/02/2020', 'DD/MM/YYYY') AND
To_date('29/02/2020', 'DD/MM/YYYY')
OR ( To_date(pipay.document_submission_date, 'DD/MM/YYYY') BETWEEN
To_date('01/02/2020', 'DD/MM/YYYY') AND
To_date('29/02/2020', 'DD/MM/YYYY')
)
)
. Это предикаты фильтров в строках, в которых received_date
или document_submission_date
относятся к февральскому месяцу. То, что вы показываете в своих текущих результатах, удовлетворяет этим условиям.
Если вы хотите, чтобы оба столбца были в феврале, используйте AND
вместо OR
. Я также рекомендовал бы использовать литералы даты и полуоткрытые интервалы, поскольку они делают запрос короче и легче для чтения:
AND to_date(pipay.received_date, 'DD/MM/YYYY') >= date '2020-02-01'
AND to_date(pipay.received_date, 'DD/MM/YYYY') < date '2020-03-01'
AND to_date(pipay.document_submission_date, 'DD/MM/YYYY') >= date '2020-02-01'
AND to_date(pipay.document_submission_date, 'DD/MM/YYYY') < date '2020-03-01'
Примечание: вам следует действительно исправить схему и сохранить дату значения в виде date
типов данных. Хранение дат в виде строк - плохая практика, которая делает вещи неэффективными и излишне сложными.
Если вы хотите все null
s в document_submission_date
, тогда:
AND to_date(pipay.received_date, 'DD/MM/YYYY') >= date '2020-02-01'
AND to_date(pipay.received_date, 'DD/MM/YYYY') < date '2020-03-01'
AND (
pipay.document_submission_date IS NULL
OR (
to_date(pipay.document_submission_date, 'DD/MM/YYYY') >= date '2020-02-01'
AND to_date(pipay.document_submission_date, 'DD/MM/YYYY') < date '2020-03-01'
)
)