SQL Server中的一個可空的BIT值有三個可能的值:null,0和1.我有兩列都是可空的BIT,我想知道它們何時「相等」,意思是NULL等於「NULL和1等於1,而0不等於NULL。但是,我所有的CASE陳述都沒有給出我想要的答案。準確地做這種比較的最好方法是什麼?如何正確比較SQL Server中的兩個可空的BIT值?
DECLARE @BitComparison TABLE
(
OldValue BIT,
NewValue BIT,
ActuallyEqual VARCHAR(10)
)
INSERT INTO @BitComparison (OldValue, NewValue, ActuallyEqual)
VALUES
(null,null,'equal'),
(null,0,'not equal'),
(null,1,'not equal'),
(0,null,'not equal'),
(0,0,'equal'),
(0,1,'not equal'),
(1,null,'not equal'),
(1,0,'not equal'),
(1,1,'equal')
SELECT *
, CASE WHEN OldValue <> NewValue then 'not equal' else 'equal' end as 'ComparisonTestA'
, CASE WHEN ISNULL(OldValue, 0) <> ISNULL(NewValue, 0) then 'not equal' else 'equal' end as 'ComparisonTestB'
, CASE WHEN ISNULL(OldValue, -1) <> ISNULL(NewValue, -1) then 'not equal' else 'equal' end as 'ComparisonTestC'
FROM @BitComparison
鑑於上面的腳本,在沒有硬編碼ActuallyEqual列中的值的匹配在ComparisonTest列中的值。我可以添加到我的SELECT以動態匹配ActuallyEqual列嗎?
'(NULL <>任何)= Joy' – jaycer