【问题标题】:SQL error when trying to join the extract date and month尝试加入提取日期和月份时出现 SQL 错误
【发布时间】:2018-11-16 21:21:21
【问题描述】:

我正在尝试运行下面的查询并收到错误

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 (year||month) 和 pe date 。 pe date 不是在同年同月中使用的最后一天。

【问题讨论】:

    标签: sql oracle plsql


    【解决方案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 的值)。

    【讨论】:

    • 我怎样才能得到 pr 的日期(比如 pr 是 201809)然后我需要日期 09/30/2018
    • @user565992 。 . .这听起来像是一个不同的问题。但是,您应该能够以正确的格式使用to_date()。
    • 我有 201809 期间,我需要基于月份和年份的月份的最后一个日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多