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

Posted

技术标签:

【中文标题】尝试加入提取日期和月份时出现 SQL 错误【英文标题】:SQL error when trying to join the extract date and month 【发布时间】: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 不是在同年同月中使用的最后一天。

【问题讨论】:

【参考方案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 期间,我需要基于月份和年份的月份的最后一个日期。

以上是关于尝试加入提取日期和月份时出现 SQL 错误的主要内容,如果未能解决你的问题,请参考以下文章

通过 excel VBA 加入 SQL 表时出错

尝试使用 ZipFileSet 提取大 jar 时出现 OutOfMemory 错误

从 SQL On-Demand 端点运行查询时出现 SSMS 错误

尝试在 wordpress javascript 中提取 acf 字段时出现错误

尝试使用 apache spark 加载模块时出现 Databricks 错误 [重复]

设置沙盒测试员帐户时出现“无效年份”错误