使用CASE WHEN
语句时遇到问题,因为列为值字符串时必须使用等号
SELECT *
FROM table
WHERE (field = (CASE WHEN @PaidStatus = 1 THEN 'HELLO' ELSE NULL END)
但是空值不能与等号运算符进行比较(我需要写WHERE field IS NULL
而不是WHERE field = NULL
)。
那我该怎么做?
答案 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'));