SQL LIKE

摘要:在本教學中,您將學習如何使用 SQL LIKE 運算子來測試值是否符合模式。

SQL LIKE 運算子簡介

LIKE 運算子是 SQL 邏輯運算子之一。如果值符合模式,LIKE 運算子會傳回 true,否則傳回 false。

LIKE 運算子的語法如下:

expression LIKE patternCode 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_characterCode language: SQL (Structured Query Language) (sql)

例如:

value LIKE '%10!%%' ESCAPE '!'Code language: JavaScript (javascript)

在此範例中,! 是一個跳脫字元。它會指示 LIKE 運算子將 10% 中的 % 視為一般字元。

實際上,您通常會在 WHERE 子句中使用 LIKE 運算子,在 SELECTUPDATEDELETE 陳述式中。

SQL LIKE 運算子範例

我們將在 範例資料庫 中使用 employees 資料表進行示範。

employees_table

以下範例使用 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 運算子。
  • 使用 % 萬用字元來比對一個或多個字元。
  • 使用 _ 萬用字元來比對單一字元。
這個教學對您有幫助嗎?