我必须检查两个值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)
有没有一种聪明的方法来写这个表达式? 谢谢!
答案 0 :(得分:3)
我认为你可以使用COALESCE
WHERE coalesce(@X, '') <> coalesce(@Y, '')
如果其中一个变量为null
,它会返回一个空字符串,所以如果两个变量为null
,则两个空字符串变为相等。
答案 1 :(得分:1)
我通常使用我选择的技术from here
SELECT 1 AS valuesDifferent
WHERE EXISTS (SELECT @X
EXCEPT
SELECT @Y)
如果 WHERE EXISTS
包含的子查询返回一行,则返回true。如果两个值不同,则会发生这种情况。对于此操作,null被视为不同的值。
答案 2 :(得分:0)
您可以尝试使用NULLIF,如下所示:
WHERE NULLIF(@X,@Y) IS NOT NULL OR NULLIF(@Y,@X) IS NOT NULL
答案 3 :(得分:-1)
您可以使用ISNULL
WHERE ISNULL(@X,'') <> ISNULL(@Y,'')