2011-10-17 20 views
1

在SQL Server 2008,我運行下面的SQL:爲什麼在SQL語句中匹配NULL的isnull(<field>,0)?

SELECT id, old_tgt_price, new_tgt_price 
FROM inst i 
WHERE inst_id IN (281, 229) 
AND is_latest = 1 

結果如下:

id   old_tgt_price new_tgt_price 
4492  462    NULL 
4487  2700   2500 

沒有錯在那裏。如果我添加一個檢查,新的舊的,價格不相等(同時預期一些值是NULL):

SELECT id, old_tgt_price, new_tgt_price 
FROM inst i 
WHERE inst_id IN (281, 229) 
AND is_latest = 1 
AND (isnull(old_tgt_price, 0) != isnull(new_tgt_price, 0)) 

我得到相同的結果。對於ID爲4492的記錄,當然AND(isnull(old_tgt_price,0)!= isnull(new_tgt_price,0))子句應該失敗。

爲什麼記錄4492仍在第二個結果集中返回?

回答

2

在底部添加的聲明是說選擇該行,如果 old_tgt_price = new_tgt_price而且正在改變!如果它們爲空,則它們都爲0。 old_tgt_price不爲null,因此其值爲462. new_tgt_price爲null,因此它的值爲0.它們不相等,因此它會打印結果。

你在做什麼?你不希望它打印空結果嗎?

+0

哦,當然。衛生署!謝謝。這是我休假兩週後的第一天... – Ryan

0

null將爲0被改變,以你的條件將是這樣的:462 = 0,這是TRUE

相關問題