LCASE() / LOWER() 函數 (SQL LCASE/LOWER Function)

LCASE()LOWER() 函數用於將字串中的英文字母轉換為小寫。兩者功能相同,只是名稱不同。

各資料庫的函數名稱

資料庫函數名稱
MySQLLCASE()LOWER()
SQL ServerLOWER()
PostgreSQLLOWER()
OracleLOWER()
SQLiteLOWER()

語法 (Syntax)

-- MySQL
SELECT LCASE(column_name) FROM table_name;
SELECT LOWER(column_name) FROM table_name;

-- 其他資料庫
SELECT LOWER(column_name) FROM table_name;

用法範例 (Example)

customers 資料表:

C_IdNameEmail
1SmithSmith@MAIL.com
2BRADBRAD@MAIL.COM

範例 1:轉換為小寫

SELECT Name, LOWER(Name) AS LowerName
FROM customers;

結果:

NameLowerName
Smithsmith
BRADbrad

範例 2:標準化 Email 格式

SELECT LOWER(Email) AS NormalizedEmail
FROM customers;

結果:

NormalizedEmail
smith@mail.com
brad@mail.com

實際應用範例

1. 資料清理與標準化

-- Email 統一轉為小寫
UPDATE customers
SET Email = LOWER(Email);

2. 不區分大小寫的搜尋

-- 搜尋使用者 (不區分大小寫)
SELECT * FROM users
WHERE LOWER(Username) = LOWER('Admin');

3. URL 友善化 (Slug 產生)

SELECT
    Title,
    LOWER(REPLACE(REPLACE(Title, ' ', '-'), '_', '-')) AS Slug
FROM posts;
-- 結果範例:'Hello World' → 'hello-world'

4. 搭配 UPPER() 進行格式化

-- 首字大寫、其餘小寫 (Proper Case)
SELECT CONCAT(
    UPPER(LEFT(Name, 1)),
    LOWER(SUBSTRING(Name, 2))
) AS ProperName
FROM customers;
-- 結果:'SMITH' → 'Smith'

5. 資料比對

-- 比對兩個表中的資料 (忽略大小寫差異)
SELECT a.*, b.*
FROM table_a a
JOIN table_b b ON LOWER(a.Email) = LOWER(b.Email);

注意事項

  1. 僅影響英文字母LOWER() 只會轉換英文字母 (A-Z → a-z),數字、符號和非英文字元不受影響。

  2. 不會修改原始資料:函數只是返回轉換後的結果,不會改變資料表中的實際資料。

  3. 效能考量:在 WHERE 子句中使用函數可能會影響索引效能。

-- 如果經常需要不區分大小寫的搜尋,考慮:
-- 1. 建立計算欄位並建立索引
-- 2. 使用不區分大小寫的排序規則 (Collation)

相關主題