LEFT() / RIGHT() 函數 (SQL LEFT() / RIGHT() Function)
LEFT() 函數用來取得字串左邊指定數量的字元,RIGHT() 函數則是取得右邊的字元。
語法
LEFT(string, number_of_chars)
RIGHT(string, number_of_chars)
- string:原始字串或欄位名稱
- number_of_chars:要擷取的字元數
基本範例
SELECT LEFT('Hello World', 5);
-- 結果: Hello
SELECT RIGHT('Hello World', 5);
-- 結果: World
SELECT LEFT('ABC123', 3);
-- 結果: ABC
SELECT RIGHT('ABC123', 3);
-- 結果: 123
從資料表欄位擷取
假設有一個客戶資料表 customers:
| customer_id | phone |
|---|---|
| 1 | 02-12345678 |
| 2 | 03-87654321 |
取得電話區碼和號碼:
SELECT
customer_id,
LEFT(phone, 2) AS area_code,
RIGHT(phone, 8) AS number
FROM customers;
結果:
| customer_id | area_code | number |
|---|---|---|
| 1 | 02 | 12345678 |
| 2 | 03 | 87654321 |
各資料庫支援
| 資料庫 | LEFT() | RIGHT() | 替代方案 |
|---|---|---|---|
| MySQL | ✓ | ✓ | - |
| SQL Server | ✓ | ✓ | - |
| PostgreSQL | ✓ | ✓ | - |
| Oracle | ✗ | ✗ | SUBSTR() |
Oracle 替代方案
Oracle 沒有 LEFT() 和 RIGHT() 函數,需要使用 SUBSTR():
-- LEFT(string, n) 的替代
SELECT SUBSTR('Hello World', 1, 5) FROM dual;
-- 結果: Hello
-- RIGHT(string, n) 的替代
SELECT SUBSTR('Hello World', -5) FROM dual;
-- 結果: World
搭配其他函數使用
取得 email 中 @ 之前的使用者名稱:
-- MySQL / SQL Server
SELECT LEFT(email, CHARINDEX('@', email) - 1) AS username FROM users;
-- MySQL 使用 LOCATE
SELECT LEFT(email, LOCATE('@', email) - 1) AS username FROM users;
取得檔案副檔名:
-- 假設檔名格式為 filename.ext
SELECT RIGHT(filename, 3) AS extension FROM files;