尝试加入提取日期和月份时出现SQL错误

时间:2018-11-16 21:21:22

标签: sql oracle plsql

我正在尝试运行以下查询并出现错误

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日期不是使用同一年和月份的月份中的最后一天。

1 个答案:

答案 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上输入值)。