如何比较sql server中的不同值

时间:2014-07-04 09:24:56

标签: 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)

有没有一种聪明的方法来写这个表达式? 谢谢!

4 个答案:

答案 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,'')