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

Posted

技术标签:

【中文标题】SELECT 和 WHERE 中的 SQL CASE 用于选择行【英文标题】:SQL CASE in SELECT and WHERE for selecting rows 【发布时间】:2015-11-27 15:19:41 【问题描述】:

有什么办法可以做到这一点:

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”搜索这些行。

【问题讨论】:

是的,只是不要忘记您的FROM 子句 来自?所以我应该在这个yes中提出第二个查询? 【参考方案1】:

在喜欢的地方给出案例,

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

【讨论】:

这将给出与接受相同的答案,只需尝试 确实,对不起,我误解了你昨天写的内容。【参考方案2】:

你可以试试这个:

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

【讨论】:

这是我部分需要的,但是如果我想在一个表中执行此操作并覆盖 a 怎么办? 添加了覆盖表字段 a 的选择语句。请尝试一下。【参考方案3】:

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

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

但如果你真的想用例,你需要 FROM 语句

【讨论】:

是的,我只是忘记了,但这不是重点。我不会使用字符串“test”来搜索行。这就是我使用 CASE 的原因【参考方案4】:

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

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

这是一个语法 - Control Flow Functions

【讨论】:

【参考方案5】:
SELECT 
  *, 
  ( CASE a
      WHEN 0 THEN "test1" 
      WHEN 1 THEN "test2" 
  END) as a_txt
FROM tableXY

不知道你想用 where "%test%" 做什么

【讨论】:

以上是关于SELECT 和 WHERE 中的 SQL CASE 用于选择行的主要内容,如果未能解决你的问题,请参考以下文章

linq to sql select和where的区别

SQL学习Where语句中的各种匹配方式

简述SELECT语句中的FROM、WHERE以及ORDER BY子句的作用。SQL Server

SQL - SELECT WHERE 存储在 JSON varchar 中的日期大于或小于固定日期

SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列 'id'(SQL:select * from `songs` where `id` = 5 limit 1)

sql select where like 变量模糊查询