我正在尝试运行以下查询并出现错误
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日期。 pe日期不是使用同一年和月份的月份中的最后一天。
答案 0 :(得分:1)
您缺少逗号(在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
用于日期/时间,特别是对于Oracle中的date
,因为它总是具有时间成分。所以我将where
写为:
where le.pdate >= date '2018-01-01' and
le.pdate < date '2018-11-01'
这可以在有或没有时间成分的情况下使用(嗯,假设您要在2018-10-31上输入值)。