字串操作是資料清洗、報表產生、資料轉換的基礎。SQL Server 提供超過 20 個字串函數,涵蓋連接、截取、搜尋、替換、大小寫轉換等所有常見需求。
| 分類 | 函數 | 用途 |
|---|---|---|
| 連接 | + (運算子) | 連接兩個或多個字串、二進位串、欄位 |
| CONCAT (SQL 2012+) | 智慧連接,自動處理 NULL 值 | |
| 大小寫轉換 | UPPER | 轉大寫 |
| LOWER | 轉小寫 | |
| LTRIM / RTRIM / TRIM | 移除前導/尾隨/兩側空白 | |
| 截取與擷取 | SUBSTRING | 從指定位置擷取指定長度 |
| LEFT / RIGHT | 從左/右側擷取指定字元數 | |
| STUFF | 刪除並插入字串(強大的替換工具) | |
| REVERSE | 字串反轉 | |
| SPACE | 產生指定數量的空白字串 | |
| 搜尋與比對 | CHARINDEX | 尋找子字串起始位置 |
| PATINDEX | 支援萬用字元的模式搜尋 | |
| DIFFERENCE / SOUNDEX | 發音相似度比對(模糊查詢) | |
| REPLICATE | 重複字串 N 次 | |
| 轉換與編碼 | ASCII | 取得最左字元的 ASCII 碼 |
| CHAR | 依 ASCII 碼取得字元 | |
| STR | 數值轉字串(可指定長度與小數位) |
SUBSTRING(expression, start, length)
-- 範例:擷取電子郵件的使用者名稱
SELECT SUBSTRING(email, 1, CHARINDEX('@', email) - 1) FROM users
STUFF(char_expr1, start, length, char_expr2) -- 範例:手機號碼遮罩處理 SELECT STUFF(phone, 4, 4, '****') FROM customers -- 結果:0912****5678
%、_ 萬用字元,彈性較高-- 發音相似度 1-4,4 為完全相同
SELECT DIFFERENCE('Smith', 'Smyth') -- 返回 4
SELECT SOUNDEX('Smith') -- 返回 S530
SELECT UPPER(LTRIM(RTRIM(REPLACE(name, ' ', ' ')))) FROM products
SELECT RIGHT(REPLICATE('0', 6) + CAST(id AS VARCHAR), 6) FROM orders
-- 結果:000001, 000042, 001234