NOT LIKE 文字比對運算

expr NOT LIKE pat [ESCAPE 'escape_char']
  • expr 傳入的字串
  • pat 比對條件式字串
  • escape-char 指定的脫逸字元

查詢結果相同於 NOT (expr LIKE pat [ESCAPE 'escape_char'])。
備註:涉及NOT LIKE的聚合查詢中,比對包含有NULL的欄位時,可能產生不可預期的結果。
例如:有一個TABLE `foo`,包含兩個NULL的資料列。
CREATE TABLE foo (bar VARCHAR(10));
INSERT INTO foo VALUES (NULL), (NULL);

查詢『SELECT COUNT(*) FROM foo WHERE bar LIKE '%baz%';』回傳值為0。你也許會認為『SELECT COUNT(*) FROM foo WHERE bar NOT LIKE '%baz%';』應該會回傳2。但是在這個個案中回傳值並不是預期的,回傳值是0。原因是NULL進行NOT LIKE expr比對時,回傳值一定是NULL, 與expr無關。在使用NOT RLIKE或是NOT REGEXP的聚合查詢中,也會有同樣的狀況發生。在這些個案中,你必須使用OR(不是用AND)來連接NOT NULL來進行比對,例如:
SELECT COUNT(*) FROM foo WHERE bar NOT LIKE '%baz%' OR bar IS NULL;

沒有留言: