LIKE 文字比對運算

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

使用簡單的規則運算式之比對模式。回傳1(TRUE)或0(FALSE)。若expr或pat中任何一個為NULL,則結果為NULL。
比對條件式的字串不一定要是文字字串。可以是一個字串表達式或Table中的Collumn。
基於SQL語言的標準,LIKE是逐字進行比較,因此會與運算子等號(=)的結果有所不同。例如:
mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+
| 'ä' LIKE 'ae' COLLATE latin1_german2_ci |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+
| 'ä' = 'ae' COLLATE latin1_german2_ci |
+--------------------------------------+
| 1 |
+--------------------------------------+

你可以使用下面兩個萬用字元進行LIKE進行比對方法。
  • % 符合任何長度的字串,甚至包括空字串
  • _ 符合指定長度的字串
mysql> SELECT 'David!' LIKE 'David_';
-> 1

mysql> SELECT 'David!' LIKE '%D%v%';
-> 1
如果要在字串中比對萬用字元(%、_)必須在比對的萬用字元前面加上脫逸字元,如果沒有指定脫逸字元,預設值是『\』。因此,要用\%來比對%,\_來比對_。
mysql> SELECT 'David!' LIKE 'David\_';
-> 0
mysql> SELECT 'David_' LIKE 'David\_';
-> 1
你也可以使用ESCAPE來指定脫逸字元。
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
脫逸字元可以為空字元,也可以是一個字元的長度。從 MySQL 5.1.2開始, 如系統變數 NO_BACKSLASH_ESCAPES為Enabled,則該脫逸字元不能為空字元。
以下兩個例子說明字串比較不區分大小寫,除非其中一個操作數為二進制字串:
mysql%gt; SELECT 'abc' LIKE 'ABC';
-%gt; 1
mysql%gt; SELECT 'abc' LIKE BINARY 'ABC';
-%gt; 0

在MySQL中LIKE比對可以對數字進行比對(延伸標準SQL語言的LIKE)。
mysql%gt; SELECT 'abc' LIKE 'ABC';
-%gt; 1
mysql%gt; SELECT 10 LIKE '1%';
-%gt; 1

備註:因為MySQL在字串中使用C語言的脫逸字元語法(例如,用『\n』代表一個換行字元),在LIKE字串中,必須使用兩個『\』來表達。例如,若要尋找『\n』, 必須寫成『\\n』。而若要尋找『\』,則必須寫成『\\\\』;原因是反斜線符號會被語法分析程序剖析一次,在進行比對運算時,又會被剖析一次,最後會剩下一個反斜線符號接受比對。

沒有留言: