#sql #oracle #if-statement #case #between
#sql #Oracle #if-оператор #case #между
Вопрос:
мое требование заключается в том, что если первое условие равно нулю, то проверьте второе условие, если второе условие равно нулю, а затем третье условие в базе данных oracle, поэтому я пытаюсь достичь этого с помощью оператора case, как показано ниже, но получаю ошибку как отсутствующее выражение / отсутствующее ключевое слово.
CASE
WHEN (TRUNC( OTA_EVENTS.COURSE_START_DATE) BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE ) IS NULL
then (TRUNC(OTA_DELEGATE_BOOKINGS.Date_Booking_Placed) BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE)
ELSE (TRUNC(OTA_DELEGATE_BOOKINGS.DATE_STATUS_CHANGED) BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE)
END
Пожалуйста, помогите, если есть какой-либо другой способ добиться этого
Комментарии:
1. Образцы данных и желаемые результаты, безусловно, помогут. Вопрос довольно ясен. Образец кода, похоже, не имеет никакого отношения к этому вопросу.
Ответ №1:
мое требование заключается в том, что если первое условие равно нулю, то проверьте второе условие, если второе условие также равно нулю, а затем третье условие в базе данных oracle
Я не понимаю, какое отношение ваш код имеет к этому вопросу (он использует between
, а не NULL
сравнивает. Примыкает к тому, что вы описываете, это COALESCE()
:
select coalesce(a, b, c)
Это может принимать столько аргументов, сколько вам нужно. Он возвращает первое значение, не являющееся NULL
значением.
Ответ №2:
Это означает, что вам нужно OR
между вашими условиями:
(TRUNC(OTA_EVENTS.COURSE_START_DATE)
BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE
AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE
OR ( TRUNC(OTA_DELEGATE_BOOKINGS.DATE_BOOKING_PLACED)
BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE
AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE )
OR ( TRUNC(OTA_DELEGATE_BOOKINGS.DATE_STATUS_CHANGED)
BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE
AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE ))