检查可空列的差异的最佳方法是什么?

时间:2015-12-18 00:03:50

标签: sql sql-server

我有SQL脚本,它需要检查两列之间的值,以查看值是否不同。之前我使用<>进行了一次简单的检查,但在空值方面它似乎没有削减它。

以下是检查值是否不同的唯一方法?

declare @intValue int = 1;
declare @intNull int = 1;

select 'Values are not the same' 
where (@intNull <> @intValue) or (@intValue is null and @intNull is not null) or (@intValue is not null and @intNull is null);

4 个答案:

答案 0 :(得分:1)

你所做的是正确的,据我所知,这是唯一的方法。

答案 1 :(得分:1)

您可以选择一个您知道从未在数据中使用的虚拟值:

coalesce(c1, -9999) <> coalesce(c2, -9999)

它与你的基本相同,但有点短。它可能不适合所有情况。

你问题的标题要求&#34;最佳&#34;办法。我正在回应&#34;这是唯一的方式&#34;问题在后面的问题。这样可以省去一些打字,但是如果没有认真考虑,依靠这样的特殊值可能是不明智的。

答案 2 :(得分:1)

您也可以使用isnull

declare @intValue int = 1;
declare @intNull int = 1;

select 'Values are not the same' 
where (isnull(@intNull,'') <> isnull(@intValue,''))

答案 3 :(得分:1)

使用BINARY_CHECKSUM

declare @intValue int = 1;
declare @intNull int = NULL;

SELECT CAST(BINARY_CHECKSUM(@intValue) AS BIGINT)
    , CAST(BINARY_CHECKSUM(@intNull) AS BIGINT)

BINARY_CHECKSUM也适用于字符串。