包括NULL比较

时间:2016-10-28 16:00:45

标签: sql db2

我的DB2 SQL要求我报告一组值,如果它们不同的话。 例如:

 Current Assessment  Previous Assessment
 20                  25
 19                  19  
 30                  32
 30                  _________

以上返回第1行和第3行。显然不是第2行。但是我还需要它返回第4行......但是因为它与Null相比它并没有返回它。

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

可以使用IS NULL& OR条件

代码

Where (  ("Current Assessment" <> "Previous Assessment") 
      OR ("Current Assessment" IS NULL)
      OR ("Previous Assessment" IS NULL)
      )

答案 1 :(得分:1)

您可以使用以下内容。合并将确保它仅比较不同的值。如果两个值都为null,那么查询将把它们视为匹配

WHERE COALESCE(current_assessment, <value>) <> 
    COALESCE(previous_assessment, <value>) ;

请注意,值应该是一个非发生值,由一个非常低的负数来预测,如-999999

答案 2 :(得分:0)

如果比较数值

WHERE COALESCE(current_assessment, previous_assessment +1, 0) <> 
      COALESCE(previous_assessment, current_assessment +1, 0) ;

如果你比较chararcteres值

WHERE COALESCE(current_assessment, previous_assessment || 'X', '') <> 
      COALESCE(previous_assessment, current_assessment || 'X', '') ;

使用此方法,null = null并且无需为coalesce选择任意值。

否则,如果您确定您的列不包含一个XVALUE,则可以执行此操作:

WHERE ifnull(current_assessment, XVALUE) <> ifnull(previous_assessment, XVALUE);

最好的方法是

Where current_assessment<>previous_assessment or (current_assessment is null and previous_assessment is not null) or (current_assessment is not null and previous_assessment is null)