Ошибка SQL при попытке объединить дату и месяц - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь выполнить приведенный ниже запрос и получить ошибку

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 TO_DATE('10/31/2018','mm/dd/yyyy')  
    END
from
    load_entry le 
where
    le.pdate between to_date('01/01/2018', 'mm/dd/yyyy') and to_date('10/31/2018', 'mm/dd/yyyy')

Ошибка:

из ключевого слова, не найденного там, где ожидается.

У меня есть pr (год || месяц) и pe дата.дата не совпадает с тем же годом и месяцем, когда используется последний день месяца.

1 Ответ

0 голосов
/ 17 ноября 2018

Вам не хватает запятой (до 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).

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