如何处理在NOT IN空值,而不是像在Oracle中的语句?(How do I handle nul

2019-09-18 13:47发布

我有一根长的PL / SQL其除了where子句中的一个小部分运作良好。

我期待的是一个行应返回,但由于where子句检查是空的领域,不被尽管符合标准返回的行。

我在这里读一个很好的提示:
http://jonathanlewis.wordpress.com/2007/02/25/not-in/

它解释了空值不是如何影响报表,我相信这是同为NOT LIKE为好。

我一直没能找到是类似更换,我需要。 我需要以某种方式切换到这一点的IN和LIKE或提供的东西,如果空回行?

这里是我的代码的简化版本。

SELECT * FROM Temp_Table T
WHERE -- Other where constraints
AND (T.Col_One NOT LIKE 'AString'
     OR T.Col_Two NOT IN ('BString','CString'))

在我的处境行必须在这两个Col_One和Col_Two空。

任何帮助是极大的赞赏。

谢谢。

Answer 1:

尝试这个:

AND (NVL(T.Col_One,'NuLl') NOT LIKE 'AString'
      OR NVL(T.Col_Two,'NuLl') NOT IN ('BString','CString')) 


Answer 2:

像这样的东西应该工作:

T.Col_One IS NULL OR T.Col_One NOT LIKE 'AString'
OR T.Col_Two IS NULL OR T.Col_Two NOT IN ('BString','CString')

请注意,...

T.Col_Two NOT IN ('BString','CString') 

...相当于...

T.Col_Two <> 'BString' AND T.Col_Two <> 'CString'

......这些“崩溃”为NULL的情况下,T.Col_Two为NULL。



Answer 3:

按照惯例NULLlike或等于任何东西-唯一有效的测试将是IS NULL将返回true。



Answer 4:

检查Oracle文档中的NVL函数: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm



文章来源: How do I handle nulls in NOT IN and NOT LIKE statements in Oracle?