为什么isnull(<field>,0)在SQL语句中匹配NULL?</field>

时间:2011-10-17 06:00:58

标签: sql sql-server sql-server-2008

在SQL Server 2008中,我运行以下SQL:

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 个答案:

答案 0 :(得分:2)

底部添加的声明是说选择该行if old_tgt_price!= new_tgt_price并且如果它们为null,则将它们都更改为0。 old_tgt_price不为null,因此其值为462.new_tgt_price为null,因此它的值为0.它们不相等,因此它会打印结果。

你想做什么?你不想让它打印出空结果吗?

答案 1 :(得分:0)

您的null将更改为0,因此您的情况将如下所示:462!= 0,即TRUE