SQL SELECT 中的 CASE 和 WHERE 用于选择行

SQL CASE in SELECT and WHERE for selecting rows

有什么方法可以使这个工作:

SELECT *, CASE WHEN a=0 THEN "test1"
              WHEN a=1 THEN "test2"
         END AS a FROM table WHERE a LIKE "%test%"

所以它应该给我所有 a=0 or a=1 的行。关键是我需要使用字符串 "test" .

搜索这些行

如果您想要所有 a=0 或 a=1 的行,您可以使用 IN 运算符

SELECT * FROM table WHERE a IN (0,1)

但是如果你真的想使用 case 你需要 FROM 语句

有两种 CASE 语句,一种用于语句,另一种用于表达式(您需要什么)。你应该做这样的事情 -

SELECT CASE a WHEN 0 THEN 'test1' WHEN 1 THEN 'test2' END

这是语法 - Control Flow Functions

你可以试试这个:

SELECT * FROM
    (SELECT *,CASE WHEN a=0 THEN "test1"
                  WHEN a=1 THEN "test2"
             END AS b 
  FROM  TableA) TableB
WHERE b LIKE "%test%"

Sqlfiddle

如果您想覆盖字段:

SELECT * FROM
    (SELECT CASE WHEN a=0 THEN "test1"
          WHEN a=1 THEN "test2"
     ELSE a
     END AS a 
  FROM  TableA) TableA
WHERE a LIKE "%test%"

Sqlfiddle

SELECT 
  *, 
  ( CASE a
      WHEN 0 THEN "test1" 
      WHEN 1 THEN "test2" 
  END) as a_txt
FROM tableXY

不知道你想用 where "%test%"

做什么

给出喜欢的地方,

SELECT * FROM table WHERE (CASE WHEN a=0 THEN "test1"
              WHEN a=1 THEN "test2"
         END)  LIKE "%test%"