字串函數是 T-SQL 資料清洗、格式化、報表產出的基石。掌握核心轉換函數的語法、回傳型別、邊界行為,能撰寫出健壯且高效的字串處理邏輯。
| 函數 | 功能 | 語法 | 回傳型別 | 關鍵行為 |
|---|---|---|---|---|
ASCII(char_expr) | 回傳最左字元的 ASCII 碼值 | ASCII('A') → 65 | int | 多字元字串僅取第一字元;空字串回傳 0 |
CHAR(int_expr) | 將 ASCII 碼轉為字元 | CHAR(65) → 'A' | char(1) | 輸入超出 0-255 回傳 NULL |
LOWER(char_expr) | 字串轉小寫 | LOWER('SQL') → 'sql' | varchar/nvarchar | 依照資料庫定序規則,Unicode 字元正確處理 |






ASCII(123) 視為數值 123 而非字串 '123',會回傳字元 '1' 的 ASCII 碼 49。含非數字字元時必須加單引號:ASCII('A1')。CHAR 只回傳單一字元,組合字串請用 CHAR(13)+CHAR(10) 產生 CRLF。LOWER/UPPER 為非決定性函數(同輸入在不同定序下可能產生不同輸出),不可用於計算欄位索引。COLLATE 指定二進位定序 (Latin1_General_BIN) 加速比較/排序。-- 產生固定長度代碼:前綴 + 零填充流水號
DECLARE @prefix char(3) = 'INV', @seq int = 42;
SELECT @prefix + RIGHT('000000' + CAST(@seq AS varchar(6)), 6) AS InvCode;
-- 結果: INV000042
-- 移除控制字元 (含 Tab, CR, LF)
SELECT REPLACE(REPLACE(REPLACE(DirtyCol, CHAR(9), ''), CHAR(13), ''), CHAR(10), '') AS CleanCol;
-- 大小寫不敏感搜尋 (效能優於 LOWER)
SELECT * FROM Products WHERE ProductName COLLATE Latin1_General_CI_AI LIKE '%keyword%';
字串函數看似簡單,但定序敏感性、隱含轉換、NULL 傳播等細節決定了生產環境的穩定度。建立團隊共用的「字串處理最佳實務清單」,納入程式碼審查標準。