我有一根长的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空。
任何帮助是极大的赞赏。
谢谢。
尝试这个:
AND (NVL(T.Col_One,'NuLl') NOT LIKE 'AString'
OR NVL(T.Col_Two,'NuLl') NOT IN ('BString','CString'))
像这样的东西应该工作:
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。
按照惯例NULL
不like
或等于任何东西-唯一有效的测试将是IS NULL
将返回true。
检查Oracle文档中的NVL函数: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm