sql NOT LIKE NULL

时间:2012-03-19 21:02:32

标签: sql

在我的where子句中, 我有以下内容:

   where SharePt  NOT LIKE 'SharePoint Document%' 

即使SharePt为空,结果也不会返回任何内容。

但是,当我执行以下操作时,它会起作用 或SharePtVer IS NULL

    where SharePt  NOT LIKE 'SharePoint Document%' OR SharePt  IS NULL

想知道为什么NOT LIKE在包含NULL>

方面不起作用

3 个答案:

答案 0 :(得分:6)

SQL使用three-valued logic ... NULLFALSE不同,NOT NULLTRUE不同。

NULL表示缺少值,并在SQL的三值逻辑中起到未知值的作用:

A AND B | TRUE    | FALSE   | Unknown
--------+---------+---------+--------
TRUE    | TRUE    | FALSE   | Unknown
FALSE   | FALSE   | FALSE   | FALSE
Unknown | Unknown | FALSE   | Unknown


A OR B  | True    | False   | Unknown
--------+---------+---------+--------
True    | True    | True    | True
False   | True    | False   | Unknown
Unknown | True    | Unknown | Unknown

评估where SharePt NOT LIKE 'SharePoint Document%'时,SharePtNULL还是未知......那么结果将是未知的...... SharePt可能是也可能不是{ {1}}。

答案 1 :(得分:3)

迈克尔弗雷德里克森答案中的完整真值表应如下:

    A    |    B    | A AND B
---------+---------+--------
  TRUE   |  TRUE   |  TRUE  
  TRUE   | UNKNOWN | UNKNOWN
  TRUE   |  FALSE  |  FALSE 
  FALSE  |  TRUE   |  FALSE 
  FALSE  | UNKNOWN |  FALSE 
  FALSE  |  FALSE  |  FALSE 
 UNKNOWN |  TRUE   | UNKNOWN
 UNKNOWN | UNKNOWN | UNKNOWN
 UNKNOWN |  FALSE  |  FALSE 

    A    |    B    | A OR B
---------+---------+-------
  TRUE   |  TRUE   |  TRUE  
  TRUE   | UNKNOWN |  TRUE  
  TRUE   |  FALSE  |  TRUE  
  FALSE  |  TRUE   |  TRUE  
  FALSE  | UNKNOWN | UNKNOWN
  FALSE  |  FALSE  |  FALSE 
 UNKNOWN |  TRUE   |  TRUE  
 UNKNOWN | UNKNOWN | UNKNOWN
 UNKNOWN |  FALSE  | UNKNOWN

OP的谓词:

( SharePt NOT LIKE 'SharePoint Document%' ) OR ( SharePt IS NULL )

NULL用于变量SharePt

( NULL NOT LIKE 'SharePoint Document%' )  -- evaluates UNKNOWN
( NULL IS NULL )                          -- evaluates to TRUE

从真相表中:

( UNKNOWN ) OR ( TRUE )  -- evaluates TRUE

答案 2 :(得分:0)

因为除非您特别测试IS NULL或IS NOT NULL,否则与ANYTHING相比,NULL为NULL / FALSE。

令人惊讶的是,NULL = NULL也是FALSE