Sql 如何不从where not like条件中排除null?

Sql 如何不从where not like条件中排除null?,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,如果我在where子句中包含以下条件,则在查询的where子句中 where T2.Comments not like '%ABC%' and T2.Comments not like '%xyz%' 它还过滤掉空白/空注释。 我不希望它过滤掉null或空格 另一种过滤方法是什么,例如,ABC和xyz,并且不排除空值/空白 caluse的其余部分。。(在添加底部两个条件后,我没有得到任何空值 Where T1.OUT_NO = T2.OUT_NO AND T3.O

如果我在where子句中包含以下条件,则在查询的where子句中

where 
      T2.Comments not like '%ABC%' 
  and T2.Comments not like '%xyz%'
它还过滤掉空白/空注释。 我不希望它过滤掉null或空格

另一种过滤方法是什么,例如,
ABC
xyz
,并且不排除空值/空白

caluse的其余部分。。(在添加底部两个条件后,我没有得到任何空值

Where
    T1.OUT_NO = T2.OUT_NO 
AND T3.OUT_NO = T1.OUT_NO 
AND CAUSE_CAP.CAUSE_NO NOT IN (1,3,5,7,9) 
AND ("T1"."TIME_STAMP">=TO_DATE ('01-04-2013 00:00:00', 'DD-MM-YYYY HH24:MI:SS') AND "T1"."TIME_STAMP"<TO_DATE ('06-04-2013 23:59:59', 'DD-MM-YYYY HH24:MI:SS')) 
AND NOT (CAUSE_CAP.CAUSE_NO = 13 AND START_TABLE.TABLE_NO = 83)
AND T2.Comments not like '%ABC%'
AND T2.Comments not like '%XYZ%'
在哪里
T1.OUT\u NO=T2.OUT\u NO
T3.OUT\u NO=T1.OUT\u NO
原因不在(1,3,5,7,9)中

以及(“T1”。“TIME_STAMP”>=截止日期('01-04-2013 00:00:00','DD-MM-YYYY HH24:MI:SS')和“T1”。“TIME_STAMP”当您有一个条件
(类似“somecode”的列)时,
所有
空值都会从结果中排除。只有不为空的行才能导致该条件为真。因此,我认为您需要:

where  
      (   (   T2.Comments not like '%ABC%' 
          and T2.Comments not like '%xyz%'
          )
      or  T2.Comments IS NULL 
      )
的优先级高于
,因此不需要内圆括号,只是为了清楚起见才添加了内圆括号(如@horse_,带有_no_name的注释)。如果只有此条件,也不需要外圆括号


在其他DBMS中,您也需要
或T2。注释='
,但在Oracle中不需要,因为
NULL
和空字符串对于char列是一样的。

只需添加
NULL
作为一个特定的案例。[编辑以展示如何将此方法推广到更复杂的查询中]

Where
    T1.OUT_NO = T2.OUT_NO 
AND T3.OUT_NO = T1.OUT_NO 
AND CAUSE_CAP.CAUSE_NO NOT IN (1,3,5,7,9) 
AND ("T1"."TIME_STAMP">=TO_DATE ('01-04-2013 00:00:00', 'DD-MM-YYYY HH24:MI:SS') AND "T1"."TIME_STAMP"<TO_DATE ('06-04-2013 23:59:59', 'DD-MM-YYYY HH24:MI:SS')) 
AND NOT (CAUSE_CAP.CAUSE_NO = 13 AND START_TABLE.TABLE_NO = 83)
AND (T2.Comments IS NULL OR 
        (T2.Comments not like '%ABC%'
         AND T2.Comments not like '%XYZ%')
    )
在哪里
T1.OUT\u NO=T2.OUT\u NO
T3.OUT\u NO=T1.OUT\u NO
原因不在(1,3,5,7,9)中

“T1”“TIME_STAMP”>=截止日期('01-04-2013 00:00:00','DD-MM-yyyyy HH24:MI:SS')和“T1”“TIME_STAMP”将其放在一个“不像所有人”的语句中是为了明确意图,并缩短代码以获得更好的概述

    and (T2.Comments not like all ('%ABC%','%xyz%') or T2.Comments is null)

我以前有更多的条件,不喜欢你能看到更新的where子句吗?即使
绑定比
强,我还是会在条件中添加括号以明确目的。你能举例说明哪一个吗?我把它移到了ANSI格式的完全外部联接。你指的是什么吗?哦,现在看到了,是吗nks。