Отсутствует ключевое слово в случае Oracle - PullRequest
0 голосов
/ 10 октября 2019

Я не могу выяснить, какое ключевое слово отсутствует, когда я пытался выполнить приведенный ниже запрос, что я хочу, если присутствуют startDate и endDate, если между остальными возвращаются данные sysdate-7.

    select * from LARGE_RELATION LR where
     (CASE WHEN (STARTDATE IS NOT NULL AND ENDDATE IS NOT NULL)
           THEN LR.END_DT BETWEEN to_date(STARTDATE, 'yyyymmdd') and to_date(ENDDATE, 'yyyymmdd')
           ELSE (LR.END_DT IS NULL OR LR.END_DT > SYSDATE - 7)
           END);

ORA-00905: пропущенное ключевое слово 00905. 00000 - «пропущенное ключевое слово» * Причина:
* Действие: Ошибка в строке: 3 Столбец: 31

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

вам нужно указать параметр, который вы хотите проверить после case в вашем примере - CASE STARTDATE WHEN IS NOT NULL AND (ENDDATE IS NOT NULL)

0 голосов
/ 10 октября 2019

Первый дескриптор условия, когда обе даты не равны нулю

Вторая проверяется, если одна из дат равна нулю

select * 
from LARGE_RELATION LR 
where
    (    STARTDATE IS NOT NULL 
     AND ENDDATE IS NOT NULL
     AND LR.END_DT BETWEEN to_date(STARTDATE, 'yyyymmdd') 
                       AND to_date(ENDDATE, 'yyyymmdd')
    ) OR
    (     (STARTDATE IS NULL OR ENDDATE IS NULL)
      AND (LR.END_DT IS NULL OR LR.END_DT > SYSDATE - 7)
    ) 
...