[英]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.