【问题标题】:Syntax error "Missing keyword" in case statement in WHERE clauseWHERE 子句中的 case 语句中的语法错误“缺少关键字”
【发布时间】:2019-05-29 09:34:18
【问题描述】:

我的 case 语句中有一些语法错误,我正在检查以下条件:

((RAP10B.CLMSRC = '2', RAP01.EFFDT - 3 years <= RAP10.LOSSDT < RAP01.EFFDT) 
       OR 
(RAP10B.CLMSRC <> '2', RAP01.EFFDT - 3 years <= RAP10.LOSSDT < RAP01.EFFDT - 60 days)

下面是我正在使用的代码。

CASE
  WHEN RAP10B.CLMSRC = '2'
  THEN rap10.lossdt_t BETWEEN Add_months(rap01.teffdt_t, - 36) AND rap01.teffdt_t
  WHEN RAP10B.CLMSRC <> '2'
  THEN rap10.lossdt_t BETWEEN Add_months(rap01.teffdt_t, - 36) AND (rap01.teffdt_t - 60)
END 

错误消息是“ORA-00905:缺少关键字”。但是我找不到丢失的东西。

【问题讨论】:

  • 你想做什么?这个case expression 在 WHERE 子句中吗?
  • @jarlh 我在 where clasue 中使用这种情况,我必须使用我在问题中提到的条件。
  • 不要那样做。请改用 AND/OR 结构!

标签: sql oracle


【解决方案1】:

WHERE 子句中使用AND/OR 结构而不是case 通常要好得多表达式

WHERE (RAP10B.CLMSRC = '2'
       AND rap10.lossdt_t BETWEEN Add_months(rap01.teffdt_t, - 36) AND rap01.teffdt_t)
   OR (RAP10B.CLMSRC <> '2'
       AND rap10.lossdt_t BETWEEN Add_months(rap01.teffdt_t, - 36) AND (rap01.teffdt_t - 60))

【讨论】:

    【解决方案2】:

    你在寻找这样的东西吗?

    CASE
       WHEN RAP10B.CLMSRC = '2'
          AND rap10.lossdt_t BETWEEN Add_months(rap01.teffdt_t, - 36) 
          AND rap01.teffdt_t THEN <your_column>
       WHEN RAP10B.CLMSRC <> '2'
          AND rap10.lossdt_t BETWEEN Add_months(rap01.teffdt_t, - 36) 
          AND (rap01.teffdt_t - 60) THEN <your_column>
    END 
    

    【讨论】:

      【解决方案3】:

      试试下面 -

      CASE
        WHEN RAP10B.CLMSRC = '2'
        and rap10.lossdt_t BETWEEN Add_months(rap01.teffdt_t, - 36) AND rap01.teffdt_t then yourval
        WHEN RAP10B.CLMSRC <> '2'
        and rap10.lossdt_t BETWEEN Add_months(rap01.teffdt_t, - 36) AND (rap01.teffdt_t - 60) yourval1
      END 
      

      【讨论】:

        猜你喜欢
        • 2015-04-17
        • 2023-03-20
        • 2020-08-14
        • 1970-01-01
        • 1970-01-01
        • 2014-09-08
        • 2018-01-12
        • 2020-01-27
        • 1970-01-01
        相关资源
        最近更新 更多