【问题标题】:Missing Keyword (ORA-00905) - Oracle Case Statement缺少关键字 (ORA-00905) - Oracle 案例语句
【发布时间】:2015-12-29 14:13:45
【问题描述】:

我尝试在 select 语句中编写 case 语句。由于高度列是 varchar2 并包含字符,因此我需要按如下方式消除字符:

SELECT FIRST_NAME,
    LAST_NAME,
    (CASE height
        WHEN height LIKE '%>%' THEN -1
        WHEN height LIKE '%<%' THEN -1
        ELSE TO_NUMBER (height)
            END) AS height
FROM TEMP;

我收到此缺少关键字错误。我是新手,如果有人能帮我解决这个问题会很好。

【问题讨论】:

  • 有2种CASE语法:CASE WHEN col condition X THEN YCASE col WHEN condition X THEN y不要混用

标签: sql oracle oracle11g case


【解决方案1】:

您搜索到的 case 表达式的语法错误:

SELECT FIRST_NAME,
       LAST_NAME,
       (CASE
          WHEN height LIKE '%>%' THEN -1
          WHEN height LIKE '%<%' THEN -1
          ELSE TO_NUMBER (height)
        END) AS height
  FROM TEMP
     ;

为了清楚起见,您可能希望合并产生相同代码的条件(当然,有用性取决于应用程序):

CASE WHEN height LIKE '%>%'
       OR height LIKE '%<%' 
     THEN -1
     ELSE TO_NUMBER (height)
END

使用正则表达式的变体(注意性能影响):

CASE WHEN REGEXP_LIKE ( height, '[<>]' ) 
     THEN -1
     ELSE TO_NUMBER (height)
END

【讨论】:

  • 谢谢,有帮助!
【解决方案2】:

试试这个

SELECT FIRST_NAME,
       LAST_NAME,
       (CASE
         WHEN height LIKE '%>%' THEN
          -1
         WHEN height LIKE '%<%' THEN
          -1
         ELSE
          TO_NUMBER(height)
       END) AS height   
  FROM TEMP;

【讨论】:

    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2017-10-18
    • 2023-03-22
    相关资源
    最近更新 更多