SQL LIKE

(NOT) LIKE 運算子 (SQL (NOT) LIKE Operator)

LIKE 運算子搭配 WHERE 子句可以依一特定模式 (Pattern) 為條件來搜尋資料表中的特定資料。

LIKE 語法 (SQL LIKE Syntax)

SELECT table_column1, table_column2, table_column3...
FROM table_name
WHERE column_name LIKE pattern;

LIKE 運算子查詢用法 (Example)

假設我們想從下面的 customers 資料表中取得住在台北縣市的顧客資料:

C_IdNameAddressPhone
1張一台北市XX路100號02-12345678
2王二新竹縣YY路200號03-12345678
3李三高雄縣ZZ路300號07-12345678
4陳四台北縣AA路400號02-87654321

我們可以使用這樣的 LIKE 查詢語句:

SELECT * FROM customers WHERE Address LIKE '台北%';

查詢結果如下:

C_IdNameAddressPhone
1張一台北市XX路100號02-12345678
4陳四台北縣AA路400號02-87654321

NOT LIKE

相反的,NOT LIKE 就是不包含在條件裡的的資料我通通要了,如上例多加上 NOT:

SELECT * FROM customers
WHERE Address NOT LIKE '台北%';

查詢後返回的結果會是:

C_IdNameAddressPhone
2王二新竹縣YY路200號03-12345678
3李三高雄縣ZZ路300號07-12345678

常用字串函數 (SQL String Functions)

除了 LIKE 用於模糊查詢之外,SQL 還提供了許多實用的字串函數,可以對文字資料進行各種操作,例如串接、擷取、取代等。以下整理了常用的字串函數:

函數說明
CONCAT()串接兩個或多個字串
SUBSTRING()擷取字串中的一部分
REPLACE()取代字串中的指定內容
UPPER()將字串轉為大寫
LOWER()將字串轉為小寫
TRIM()移除字串前後的空白
LENGTH()取得字串的長度

假設我們有一個員工資料表 employees 如下:

NameDepartmentEmail
張一業務部zhang@example.com
王二資訊部wang@example.com
李三業務部li@example.com
趙四資訊部zhao@example.com

CONCAT() 函數

CONCAT() 用來將多個字串串接在一起。例如,將員工姓名與部門組合成一個完整的描述:

SELECT CONCAT(Name, ' - ', Department) AS NameWithDept
FROM employees;

查詢結果如下:

NameWithDept
張一 – 業務部
王二 – 資訊部
李三 – 業務部
趙四 – 資訊部

SUBSTRING() 函數

SUBSTRING() 用來從字串中擷取指定位置與長度的子字串。語法為 SUBSTRING(string, start, length),其中 start 從 1 開始計算。例如,擷取 Email 中 @ 符號前的使用者名稱:

SELECT Name, SUBSTRING(Email, 1, LOCATE('@', Email) - 1) AS Username
FROM employees;

查詢結果如下:

NameUsername
張一zhang
王二wang
李三li
趙四zhao

REPLACE() 函數

REPLACE() 用來將字串中的指定內容取代為新的內容。語法為 REPLACE(string, old_string, new_string)。例如,將 Email 的網域從 example.com 改為 company.com:

SELECT Name, REPLACE(Email, 'example.com', 'company.com') AS NewEmail
FROM employees;

查詢結果如下:

NameNewEmail
張一zhang@company.com
王二wang@company.com
李三li@company.com
趙四zhao@company.com

UPPER() 與 LOWER() 函數

UPPER() 將字串轉為全部大寫,LOWER() 則轉為全部小寫。這在進行不區分大小寫的比對時特別有用:

SELECT Name, UPPER(Email) AS UpperEmail
FROM employees;

查詢結果如下:

NameUpperEmail
張一ZHANG@EXAMPLE.COM
王二WANG@EXAMPLE.COM
李三LI@EXAMPLE.COM
趙四ZHAO@EXAMPLE.COM

善用這些字串函數可以讓你在查詢時更靈活地處理文字資料。搭配 LIKE 模糊查詢與這些字串函數,就能滿足大部分的文字資料處理需求。

延伸閱讀