【问题标题】:Orace SQL Case WHEN Statement "missing keyword"Oracle SQL Case WHEN 语句“缺少关键字”
【发布时间】:2020-01-27 23:40:58
【问题描述】:

我正在使用带有 Oracle Fusion 19c 的 BI Publisher

我正在尝试查看一个 1000 字的 VARCHAR 字段 (POH.NOTE_TO_VENDOR),然后如果它包含单词 Hearing 并且它后面的字符(substr 的第一部分)不为空,即存在日期。然后我想将整个 substr 转换为日期,否则留空。

我可以让串联的 substr 工作并将其显示为字符串,或者作为日期,或者如果它不存在,那么值是 '//' 但不能直接转换,因为如果值返回 '//' 它不会转换这是迄今为止。

, CASE WHEN SUBSTR(POH.NOTE_TO_VENDOR, (INSTR(POH.NOTE_TO_VENDOR,'Hearing: ')+14),2)IS NOT NULL 
  THEN (TO_DATE((SUBSTR(POH.NOTE_TO_VENDOR, (INSTR(POH.NOTE_TO_VENDOR,'Hearing: ')+17),2)||'/'||SUBSTR(POH.NOTE_TO_VENDOR, (INSTR(POH.NOTE_TO_VENDOR,'Hearing: ')+14),2)||'/'||SUBSTR(POH.NOTE_TO_VENDOR, (INSTR(POH.NOTE_TO_VENDOR,'Hearing: ')+11),2)),'DD/MM/YY')) 
  ELSE 
  END

此代码返回错误缺失关键字。我希望它将字符串转换为日期或返回一个空白值。

在没有 else 的情况下尝试了 else 条件

我也尝试过 Case when......then '1' else '0' 正确返回 1 和 0

【问题讨论】:

  • 您应该在ELSE 之后添加一些内容。例如NULL。只是一个疯狂的猜测......
  • 试过还是不行还是缺少关键字
  • 或者删除 ELSE,如果 WHEN 失败,最终会导致 NULL。
  • 也试过了
  • 删除 else 仍然返回相同的错误

标签: sql


【解决方案1】:

问题在于括号的混乱。
我删除了所有不必要的括号,这些括号使代码难以阅读并且难以发现语法错误:

, CASE WHEN SUBSTR(POH.NOTE_TO_VENDOR, INSTR(POH.NOTE_TO_VENDOR,'Hearing: ') + 14, 2) IS NOT NULL 
    THEN TO_DATE(
      SUBSTR(POH.NOTE_TO_VENDOR, INSTR(POH.NOTE_TO_VENDOR,'Hearing: ') + 17, 2)
      || '/' ||
      SUBSTR(POH.NOTE_TO_VENDOR, INSTR(POH.NOTE_TO_VENDOR,'Hearing: ') + 14, 2)
      || '/' ||
      SUBSTR(POH.NOTE_TO_VENDOR, INSTR(POH.NOTE_TO_VENDOR,'Hearing: ') + 11, 2),
      'DD/MM/YY'
    ) 
  END

我还删除了ELSE,如果在这种情况下您只需要NULL,则不需要。

【讨论】:

  • 如果我删除了 to_date 和大小写,但就像我说它不是日期值,所以不能计算天数等,另外我想在找不到日期时删除 //。谢谢,我会试试你上面的
  • 括号的混乱听起来像电影中的小插曲
  • 不要过度使用括号。仅在需要时使用它们,不要用它们包围每个功能。如果你想检查连接返回的日期的有效性,你必须在 to_date() 之前做进一步检查
  • 这正是我想要做的,试图做一个 ISDate 但无法让它工作,所以从一个案例开始。同样关于括号,我确实尝试不使用它们,但是在编写代码时,我总是将 syranx 用于我试图编写的逻辑并将任何嵌套逻辑放在括号中,以确保我的语法正确/可行,但这确实很难阅读。 Admittedley,然后我应该回顾一下声明并尝试删除括号
  • 基本上上面想要实现的是,如果 concat 是一个可以变成日期的值,然后将其变成日期,否则返回 null,然后我可以进行日期比较等
猜你喜欢
  • 2018-01-12
  • 2015-04-17
  • 1970-01-01
  • 2023-03-20
  • 2020-02-08
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多