繁体   English   中英

SQL Server-如何在CASE THEN语句中一起使用null和value?

[英]SQL Server - how to use null and value together in CASE THEN statement?

使用CASE WHEN语句时出现问题,因为其中列是值字符串,必须使用等号

SELECT * 
FROM table
WHERE (field = (CASE WHEN @PaidStatus = 1 THEN 'HELLO' ELSE NULL END) 

但是null值不能与equal运算符进行比较(我需要写WHERE field IS NULL而不是WHERE field = NULL )。

那我该怎么办呢?

这会成功吗?

SELECT * 
FROM table
WHERE (field = 'HELLO' AND @PaidStatus = 1)
   OR (field IS NULL AND @PaidStatus <> 1)

要仅返回其中field =参数值或的行,如果参数为NULL,则返回所有行,然后:

SELECT * 
FROM table
WHERE (field = @PaidStatus OR @PaidStatus IS NULL)

对于其他组合,例如参数值是1,则字段等于“ HELLO”,或者,如果parameter为null,则所有行:

SELECT * 
FROM table
WHERE ((field = 'HELLO' AND @PaidStatus = 1) OR @PaidStatus IS NULL)

注意括号,您可能会发现缩进使其更容易理解,例如

SELECT * 
FROM table
WHERE (
         (field = 'HELLO' AND @PaidStatus = 1) 
      OR (field = 'GOODBYE' AND @PaidStatus = 2) 
      OR @PaidStatus IS NULL
      )

要使语法与大小写一起起作用?
CASE返回一个值,并且可以具有多个WHEN
因此,您可以将其与返回值进行比较。

SELECT * 
FROM table
WHERE 
(CASE 
 WHEN @PaidStatus = 1 AND field = 'HELLO' THEN 1
 WHEN field IS NULL THEN 2
 ELSE 0
 END) > 0

如果您有许多不同的条件要放入CASE中,那么这会很方便。
但是,如果只有2,那么使用OR会更短。

SELECT * 
FROM table
WHERE (field IS NULL OR (@PaidStatus = 1 AND field = 'HELLO'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM