Sql server 如何比较sql server中的不同值
我必须检查两个值X和Y是否不同。如果两者都为空,则必须将其视为相等 我发现的独特方式是: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) 有没有一个聪明的方法来写这个表达式? 谢谢 我想你可以用
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)