Оператор CASE SQL oracle database

#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 ))