Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何比较sql server中的不同值_Sql Server_Tsql_Null - Fatal编程技术网

Sql server 如何比较sql server中的不同值

Sql server 如何比较sql server中的不同值,sql-server,tsql,null,Sql Server,Tsql,Null,我必须检查两个值X和Y是否不同。如果两者都为空,则必须将其视为相等 我发现的独特方式是: select 1 as valueExists where (@X is null and @Y is not null) or (@Y is null and @X is not null) or (@X <> @Y) 选择1作为值存在 其中(@X为空,@Y不为空) 或(@Y为空,@X不为空) 或(@X@Y) 有没有一个聪明的方法来写这个表达式? 谢谢 我想你可以用

我必须检查两个值X和Y是否不同。如果两者都为空,则必须将其视为相等

我发现的独特方式是:

select 1 as valueExists 
where  (@X is null and @Y is not null) 
    or (@Y is null and @X is not null) 
    or (@X <> @Y)
选择1作为值存在
其中(@X为空,@Y不为空)
或(@Y为空,@X不为空)
或(@X@Y)
有没有一个聪明的方法来写这个表达式?
谢谢

我想你可以用COALESCE来解决这个问题

WHERE coalesce(@X, '') <> coalesce(@Y, '')
其中coalesce(@X',)coalesce(@Y',)
如果其中一个变量为
null
,它将返回一个空字符串,因此如果两个变量为
null
,则两个空字符串将相等。

您可以尝试这样使用:

WHERE NULLIF(@X,@Y) IS NOT NULL OR NULLIF(@Y,@X) IS NOT NULL

您可以使用
ISNULL

WHERE ISNULL(@X,'') <> ISNULL(@Y,'')
其中ISNULL(@X',)ISNULL(@Y',)

我通常使用自己学会的技巧


WHERE EXISTS
如果包含的子查询返回一行,则返回true。在这种情况下,如果两个值不同,就会发生这种情况。在本操作中,null被视为一个不同的值。

选择1作为存在的不同值(选择@X,选择@Y除外)
。对于
SET@X='',您接受的答案不正确;SET@Y=NULL
@Martin Smith您能解释一下您的代码是什么吗?
where exists
如果它包含的子查询返回一行,则返回true。在这种情况下,如果两个值不同,就会发生这种情况。将
null
视为不同的value@Martin史密斯,谢谢。@MartinSmith,重复的问题和你在评论中的答案不一样。我建议你把这个作为一个答案。投票重新开放。
SELECT 1 AS valuesDifferent
WHERE  EXISTS (SELECT @X
               EXCEPT
               SELECT @Y)