Вам не хватает запятой (до case
).Я человек, поэтому я всегда ставлю запятые сразу после слов в SQL, как и в любом другом тексте, который я пишу.
Я настоятельно рекомендую вам узнать оключевое слово date
для констант даты:
select le.a_code, le.pr, le.pdate,
(CASE EXTRACT(YEAR FROM le.pdate) || EXTRACT(MONTH FROM le.pdate)
WHEN TO_NUMBER(le.pr) THEN le.pdate
ELSE DATE '2018-10-31'
END)
from load_entry le
where le.pdate between date '2018-01-01' and date '2018-10-31';
Я также не рекомендую вам использовать between
для даты / времени, особенно для date
в Oracle - потому что он всегда имеет компонент времени.Поэтому я бы написал where
как:
where le.pdate >= date '2018-01-01' and
le.pdate < date '2018-11-01'
Это работает с компонентом времени или без него (хорошо, если предположить, что вы хотите значения на 2018-10-31).