SQL在IF条件之后给出语法错误

时间:2018-06-08 13:23:41

标签: mysql sql

有人可以指导我在这个查询中出错的地方。

SELECT ID, 
   IF REFERENCE_ID like '%[0-9]%' 
        THEN 
           REFERENCE_ID 
        ELSE
           ''
   END
FROM TABLE

我实际上有一个表格,其中reference_id列有时会有数字值,有时只有“ - - ”或“ _- ”因此我想在这些情况下显示空白。

4 个答案:

答案 0 :(得分:2)

您需要一个CASE语句来实现:

SELECT ID,
        CASE
            WHEN REFERENCE_ID like '%[0-9]%' THEN REFERENCE_ID 
        ELSE ''          
   END AS ReferenceId
FROM TABLE

答案 1 :(得分:0)

语法:

IF(condition,value_if_true,value_if_false)

SELECT ID,
   IF (REFERENCE_ID REGEXP '[0-9]', REFERENCE_ID, '') 
FROM   tbl;

db<>小提琴here

答案 2 :(得分:0)

您可以使用REGEXPCASE声明:

case WHEN REFERENCE_ID REGEXP '[0-9]'
     THEN REFERENCE_ID
      ELSE ''
END

答案 3 :(得分:0)

您尝试使用IF flow control structure作为表达式。那不是flow control statements的意思(强调我的):

  

MySQL支持IF,CASE,ITERATE,LEAVE LOOP,WHILE和REPEAT   构建存储程序中的流控制。它也是   支持存储函数中的RETURN。

您可以在此上下文中使用类似名称的IF function,但我特别发现CASE ... END structures更具可读性。 (有关详细信息,请参阅其他答案。)另外,我避免使用空字符串表示"空白"。 NULL通常意味着什么,如果你的程序需要区分空和空,那就表明你的设计中的某些东西并不完全清楚。