sql - 我可以在 WHERE 子句中使用 CASE 表达式吗?

标签 sql sql-server

我不确定如何在 sql 中编写查询。
到目前为止,这是我尝试过的。

where
  case 
       when a.book_id like 'AB%' then a.book_id = b.school_id,   --1   
       when a.book_id like 'CB%' then a.book_id = b.college_id.  --2
  end


案例1和2的解释。

1- 我相信是好的。
2- 当 a.book 以字母 CB 开头时,例如 CBQ123 然后只取 Q123 = b.college_id。< br/>
b.college_id 前面没有CB。

编辑以添加示例

select 
       a.Name,
       a.ID,
       a.Due,
       b.school_id,
       b.college_id
from Student a and FinishedStudent b
where
  case 
       when a.book_id like 'AB%' then a.book_id = b.school_id,   --1   
       when a.book_id like 'CB%' then a.book_id = b.college_id.  --2
  end

如果 a.book = CBQ111 那么 Q111 在 FinishedStudent 表中而不是 CBQ11,所以我只需要比较最后 3 个字符。

使用案例 2 示例进行编辑

   when a.book_id ='CBQ111' then a.book_id(Q111) = b.college_id.  --2

最佳答案

只是一个小的语法问题。在 T-SQL 中,CASE 是一个返回值的表达式,因此您需要将输出与某些内容进行比较 - 它不像在 VB 等其他语言中那样是控制流语句。

where a.book_id = case 
       when a.book_id like 'AB%' then b.school_id    --1   
       when a.book_id like 'CB%' then b.college_id   --2
  end

根据评论中乱七八糟的单词问题,也许你真正想要的是:

WHERE (a.book_id LIKE 'AB%' AND a.book_id = b.school_id)
   OR (a.book_id LIKE 'CB%' AND SUBSTRING(a.book_id, 3, 255) = b.college_id)

还有其他方法可以写最后一行,但如果 book_id 有索引,LIKE 过滤器可能仍然有用。

关于sql - 我可以在 WHERE 子句中使用 CASE 表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412738/

相关文章:

sql - 如何获取 SQL Server 2000 查询中的当前行号?

java - 如何反向选择sql中的列?

c# - 在 ASP.NET 页面上显示的 SQL <二进制数据> 图像类型

java - Tomcat8 加载错误的 SQL Server 驱动程序/未找到 SQLServerXADataSource

sql-server - 使用 Entity Framework Core 进行审计跟踪

sql-server - SQL Server 数据库表关系

c# - 存储连接字符串

python - 为什么 request.method 没有被调用?

mysql - 涉及多表的SQL查询设计

sql - ORU-10027 : buffer overflow, 限制为 100000 字节