摘要:在本教學中,您將學習如何使用 SQL LIKE
運算子來測試值是否符合模式。
SQL LIKE 運算子簡介
LIKE 運算子是 SQL 邏輯運算子之一。如果值符合模式,LIKE
運算子會傳回 true,否則傳回 false。
LIKE 運算子的語法如下:
expression LIKE pattern
Code language: SQL (Structured Query Language) (sql)
在這個語法中,LIKE
運算子會測試表達式是否符合模式。SQL 標準為您提供兩個萬用字元來建立模式:
-
%
百分比萬用字元會比對零個、一個或多個字元 -
_
底線萬用字元會比對單一字元。
以下範例示範如何使用 % 和 _ 萬用字元:
表達式 | 意義 |
---|---|
LIKE 'Kim%' | 比對以 Kim 開頭的字串 |
LIKE '%er' | 比對以 er 結尾的字串 |
LIKE '%ch%' | 比對包含 ch 的字串 |
LIKE 'Le_' | 比對以 Le 開頭且後接一個字元的字串,例如 Les、Len… |
LIKE '_uy' | 比對以 uy 結尾且前面有一個字元的字串,例如 guy |
LIKE '%are_' | 比對包含 are 且結尾為一個字元的字串 |
LIKE '_are%' | 比對包含 are ,開頭為一個字元,且結尾為任意數量字元的字串 |
請注意,除了 % 和 _ 萬用字元之外,某些資料庫系統可能還有其他特定於這些資料庫的萬用字元。
NOT LIKE
若要否定 LIKE
運算子,請使用 NOT
運算子。
expression NOT LIKE pattern
如果表達式不符合模式,NOT LIKE
運算子會傳回 true,否則傳回 false。
跳脫字元
若要比對包含萬用字元的字串,例如 10%
,您需要指示 LIKE
運算子將 10%
中的 %
視為一般字元。
若要這麼做,您需要在 ESCAPE
子句之後明確指定一個跳脫字元:
expression LIKE pattern ESCAPE escape_character
Code language: SQL (Structured Query Language) (sql)
例如:
value LIKE '%10!%%' ESCAPE '!'
Code language: JavaScript (javascript)
在此範例中,! 是一個跳脫字元。它會指示 LIKE 運算子將 10% 中的 % 視為一般字元。
實際上,您通常會在 WHERE
子句中使用 LIKE
運算子,在 SELECT
、UPDATE
和 DELETE
陳述式中。
SQL LIKE 運算子範例
我們將在 範例資料庫 中使用 employees
資料表進行示範。

以下範例使用 LIKE 運算子來尋找所有名字以 Da
開頭的員工:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Da%';
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 105 | David | Austin |
| 109 | Daniel | Faviet |
+-------------+------------+-----------+
Code language: plaintext (plaintext)
以下範例使用 LIKE 運算子來尋找所有名字以 er
結尾的員工:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%er';
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 103 | Alexander | Hunold |
| 115 | Alexander | Khoo |
| 200 | Jennifer | Whalen |
+-------------+------------+-----------+
Code language: plaintext (plaintext)
以下範例使用 LIKE 運算子來尋找姓氏包含單字 an
的員工:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
last_name LIKE '%an%';
Code language: SQL (Structured Query Language) (sql)
+-------------+-------------+-----------+
| employee_id | first_name | last_name |
+-------------+-------------+-----------+
| 102 | Lex | De Haan |
| 112 | Jose Manuel | Urman |
| 123 | Shanta | Vollman |
| 178 | Kimberely | Grant |
+-------------+-------------+-----------+
Code language: plaintext (plaintext)
以下陳述式會擷取名字以 Jo
開頭且最多接 2 個字元的員工:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Jo__';
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 110 | John | Chen |
| 145 | John | Russell |
+-------------+------------+-----------+
Code language: plaintext (plaintext)
以下陳述式會將 LIKE 運算子與 % 和 _ 萬用字元搭配使用,以尋找名字以任意數量字元開頭,且後接至多一個字元的員工:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%are_';
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+------------+
| employee_id | first_name | last_name |
+-------------+------------+------------+
| 119 | Karen | Colmenares |
| 146 | Karen | Partners |
+-------------+------------+------------+
SQL NOT LIKE 運算子範例
以下範例使用 NOT LIKE
運算子來尋找所有名字以字母 S
開頭,但不以 Sh
開頭的員工:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'S%'
AND first_name NOT LIKE 'Sh%'
ORDER BY
first_name;
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 192 | Sarah | Bell |
| 117 | Sigal | Tobias |
| 100 | Steven | King |
| 203 | Susan | Mavris |
+-------------+------------+-----------+
Code language: plaintext (plaintext)
摘要
- 如果值符合模式,
LIKE
運算子會傳回 true,否則傳回 false。 - 使用
NOT
運算子來否定 LIKE 運算子。 - 使用
%
萬用字元來比對一個或多個字元。 - 使用
_
萬用字元來比對單一字元。