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

时间:2018-09-09 08:03:34

标签: sql sql-server tsql stored-procedures

使用CASE WHEN语句时遇到问题,因为列为值字符串时必须使用等号

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

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

那我该怎么做?

3 个答案:

答案 0 :(得分:3)

这会成功吗?

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

答案 1 :(得分:1)

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

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

对于其他组合,例如参数值是1,则字段等于'HELLO';如果参数为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
      )

答案 2 :(得分:0)

要使语法与大小写一起起作用?
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'));