Oracle - 使用<>比较两列

时间:2016-05-12 16:20:32

标签: oracle

我有以下WHERE子句,我看到的结果是查询没有返回End_dt2为空的数据

如何返回列与空白不相等的位置?

以下值不会返回 表:

{{1}}

2 个答案:

答案 0 :(得分:5)

如果end_dt2为空,则任何比较都是未定义的,但不匹配。 Null behaviour is explained in the documentation。您可以将空值视为魔术日期,但您也可以明确检查空值:

where end_dt2 is null or end_dt != end_dt2

如果任一列都可以为null,并且您希望将其中一个(但不是两个)视为空,则将其视为“不同”。那么你可以这样做:

where (end_dt is not null and end_dt2 is null)
or (end_dt is null and and_dtl2 is not null)
or end_dt <> end_dt2

答案 1 :(得分:1)

空比较总是会产生问题。你应该添加一个NVL来处理:

WHERE End_dt <> NVL(End_dt2, date '9999-12-31')

当然,请注意,当End_dt2为null时,记录应出现在您的查询中。