SQL Server-如何在CASE-THEN语句中同时使用null和value?
我在使用SQL Server-如何在CASE-THEN语句中同时使用null和value?,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我在使用CASE when语句时遇到问题,因为where column是值字符串必须使用这样的等号 SELECT * FROM table WHERE (field = (CASE WHEN @PaidStatus = 1 THEN 'HELLO' ELSE NULL END) 但是空值不能与相等运算符进行比较(我需要编写其中field为null而不是其中field=null) 那么我该怎么做呢?要仅返回field=参数值的行,或者如果参数为NULL,则返回所有行,那么: SELECT *
CASE when
语句时遇到问题,因为where column是值字符串必须使用这样的等号
SELECT *
FROM table
WHERE (field = (CASE WHEN @PaidStatus = 1 THEN 'HELLO' ELSE NULL END)
但是空值不能与相等运算符进行比较(我需要编写其中field为null
而不是其中field=null
)
那么我该怎么做呢?要仅返回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
)
要仅返回字段=参数值的行,或返回参数为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
)
这样行吗
SELECT *
FROM table
WHERE (field = 'HELLO' AND @PaidStatus = 1)
OR (field IS NULL AND @PaidStatus <> 1)
选择*
从桌子上
其中(字段='HELLO'和@PaidStatus=1)
或(字段为空且@PaidStatus 1)
这会奏效吗
SELECT *
FROM table
WHERE (field = 'HELLO' AND @PaidStatus = 1)
OR (field IS NULL AND @PaidStatus <> 1)
选择*
从桌子上
其中(字段='HELLO'和@PaidStatus=1)
或(字段为空且@PaidStatus 1)
使案例语法有效吗?案例
返回一个值,并且在时可以有多个
因此,您可以与返回的值进行比较
SELECT *
FROM table
WHERE
(CASE
WHEN @PaidStatus = 1 AND field = 'HELLO' THEN 1
WHEN field IS NULL THEN 2
ELSE 0
END) > 0
如果您在案例中有许多不同的标准,这将非常方便
但是如果只有2,那么只使用或会更短
SELECT *
FROM table
WHERE (field IS NULL OR (@PaidStatus = 1 AND field = 'HELLO'));
使案例的语法有效吗?
案例
返回一个值,并且在
时可以有多个
因此,您可以与返回的值进行比较
SELECT *
FROM table
WHERE
(CASE
WHEN @PaidStatus = 1 AND field = 'HELLO' THEN 1
WHEN field IS NULL THEN 2
ELSE 0
END) > 0
如果您在案例中有许多不同的标准,这将非常方便
但是如果只有2,那么只使用或会更短
SELECT *
FROM table
WHERE (field IS NULL OR (@PaidStatus = 1 AND field = 'HELLO'));
提示:大小写表达式
计算为单个值,概念上不如语句
大,例如选择语句
或更新语句
提示:大小写表达式
计算为单个值,概念上不如语句
大,例如select语句
或update语句