Sql server T-SQL-比较两个可能为空的变量值
我正在尝试编写一个T-SQL语句,该语句将比较两个可为NULL的变量(int或varchar),Sql server T-SQL-比较两个可能为空的变量值,sql-server,tsql,null,Sql Server,Tsql,Null,我正在尝试编写一个T-SQL语句,该语句将比较两个可为NULL的变量(int或varchar),@x和@y,如果两个值都相等或都等于NULL,则返回FALSE,否则返回TRUE。A和B都是可能值的占位符 +------+------+--------+ | @x | @y | Result | +------+------+--------+ | NULL | NULL | False | | A | A | False | | B | A | True
@x
和@y
,如果两个值都相等或都等于NULL,则返回FALSE,否则返回TRUE。A和B都是可能值的占位符
+------+------+--------+
| @x | @y | Result |
+------+------+--------+
| NULL | NULL | False |
| A | A | False |
| B | A | True |
| A | B | True |
| NULL | A | True |
| A | NULL | True |
+------+------+--------+
我可以使用
COALESCE(@x,@y)
来验证@x
和@y
都为空。由于任何值都不能等于(或不等于)NULL,因此我不能使用or=运算符。写这样的声明最简洁的方式是什么?我是否必须声明一系列条件,例如:(@x不为NULL且@y不为NULL且@x@y)或(@x不为NULL且@y为NULL)或(@x为NULL且@y不为NULL)
?这是怎么回事?当
ISNULL(@x,'') = ISNULL(@y,'')
那么以下内容如何:
DECLARE @x varchar(10) = 'b',
@y varchar(10) = 'a';
SELECT CASE WHEN COALESCE(@x,'') = COALESCE(@y,'') THEN 'FALSE'
ELSE 'True'
END AS Test
请注意,您可能希望为
COALESCE(@x',)
选择一些随机值。。。在数据中找不到的东西。您可以使用合并
检查两个空值
和=
检查相等的非空值:不(合并(@x,@y)为空或@x=@y)
请注意,以下代码不会引入神奇值,例如,通过使用Coalesce(a'),
,该值不得出现在数据中
正如Dale K.所建议的,将函数应用于where
子句中的列通常会呈现条件
演示:。当这是查询中的选择列时,下面的答案就可以了。但您可能希望在where子句中坚持类似于
(@x不为NULL,@y不为NULL,@x@y)
,以确保可搜索性。这是否回答了您的问题?看到这个了吗
declare @Samples as Table ( X VarChar(1), Y VarChar(1) );
insert into @Samples ( X, Y ) values
( NULL, NULL ), ( 'A', 'A' ), ( 'B', 'A' ), ( 'A', 'B' ), ( NULL, 'A' ), ( 'A', NULL );
select X, Y,
-- Note: The result values are flipped rather than including not in the condition.
case when Coalesce( X, Y ) is NULL or X = Y then 'False' else 'True' end as Result
from @Samples;