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

问题描述 投票:0回答:3

我在使用CASE WHEN语句时遇到问题,因为列是值字符串必须使用这样的等号

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

但是无法将null值与等于运算符进行比较(我需要编写WHERE field IS NULL而不是WHERE field = NULL)。

那怎么能这样呢?

sql sql-server tsql stored-procedures
3个回答
3
投票

这会诀窍吗?

SELECT * 
FROM table
WHERE (field = 'HELLO' AND @PaidStatus = 1)
   OR (field IS NULL AND @PaidStatus <> 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
      )

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'));
© www.soinside.com 2019 - 2024. All rights reserved.