Сравните дату в Oracle, когда какое-либо значение равно нулю? - PullRequest
1 голос
/ 17 февраля 2020

Я хочу получить записи, у которых expired_date меньше "31/12/2015", но некоторое значение поля expired_date в базе данных равно нулю. Это мой SQL:

"AND TO_DATE(EXPIRED_DATE,'DD/MM/YYYY') < TO_DATE('31/12/2015','DD/MM/YYYY')"

, поэтому у меня возникла ошибка

"day of the month must between 1 and the last day of the month" 

Как я могу получить только записи с истекшим сроком действия <'31/12/2015'? </p>

РЕДАКТИРОВАТЬ: Проблема не в нулевом значении, а в моем формате в моей БД. Я храню «22-АПРЕЛЬ-15», и ошибка пытается присвоить его «ДД / ММ / ГГГГ» с помощью функции to_date

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Если ваш столбец EXPIRED_DATE имеет тип даты, вам не нужно снова преобразовывать его в дату, используя TO_DATE.

Я думаю, вам нужно следующее:

AND EXPIRED_DATE < TO_DATE('31/12/2015','DD/MM/YYYY')

Это вернет false для любого EXPIRED_DATE, который является нулевым, и эта запись не будет включена в результат.

Если вы хотите, чтобы Null EXPIRED_DATE был включен в результат, вы можете использовать ИЛИ следующим образом:

AND (EXPIRED_DATE IS NULL OR EXPIRED_DATE < TO_DATE('31/12/2015','DD/MM/YYYY'))
0 голосов
/ 17 февраля 2020

Ваш код ...E(EXPIRED_DATE,'DD/MM/YYY')... имеет 3 YYY для даты вместо 4 YYYY. Пробовал ниже, и он работает

with da(date_a) as (
    select '03/04/2015' from dual
    union all select '03/04/2015' from dual
    union all select '03/04/2017' from dual
    union all select '03/04/2015' from dual
    union all select '03/04/2016' from dual
    union all select NULL from dual
)
SELECT * FROM da WHERE   TO_DATE(date_a,'DD/MM/YYYY') < TO_DATE('31/12/2015', 'DD/MM/YYYY');

Даже если ваш столбец даты в формате даты, он все равно будет работать

with da(date_a) as (
    select '03/04/2015' from dual
    union all select '03/04/2015' from dual
    union all select '03/04/2017' from dual
    union all select '03/04/2015' from dual
    union all select '03/04/2016' from dual
    union all select NULL from dual
)
SELECT to_date(date_a, 'DD/MM/YYYY')  date_a  FROM da WHERE   TO_DATE(date_a,'DD/MM/YYYY') < TO_DATE('31/12/2015', 'DD/MM/YYYY');

дБ <> Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...