在 T-SQL 中處理文字資料,只能使用內建函數,不可直接呼叫 .NET 的 IndexOf 等方法。本文系統整理常用字串函數,分類附帶語法與避坑重點,適合開發隨時查閱。
| 函數 | 用途 | 關鍵行為 |
|---|---|---|
ASCII(char_expr) | 回傳最左字元 ASCII 碼 | 純數字字串可不加引號,含字母必須加單引號 |
CHAR(int_expr) | ASCII 碼轉字元 | 輸入超出 0~255 回傳 NULL |
LOWER / UPPER | 大小寫轉換 | 不影響非字母字元 |
STR(float_expr [,len [,dec]]) | 數值轉字串 | 預設長度 10、小數 0;長度不足左補空格;負值回傳 NULL |
LTRIM(str):移除前導空白RTRIM(str):移除尾隨空白LTRIM(RTRIM(col)) 或 TRIM()(SQL Server 2017+)| 函數 | 語法 | 說明 |
|---|---|---|
LEFT | LEFT(str, len) | 從左邊取 len 字元 |
RIGHT | RIGHT(str, len) | 從右邊取 len 字元 |
SUBSTRING | SUBSTRING(str, start, len) | 從 start 位置(1-based)取 len 字元 |
| 函數 | 差異重點 |
|---|---|
CHARINDEX('sub', str) | 找子字串首次出現位置,不支援萬用字元,不可用於 TEXT/IMAGE |
PATINDEX('%pattern%', col) | 支援萬用字元(% _),可用於 TEXT,pattern 必須包含 % |
QUOTENAME('abc', '[]') → [abc](動態 SQL 防注入必備)REPLICATE('x', 3) → xxx(負數回傳 NULL)REVERSE('abc') → cbaREPLACE(str, old, new):全域取代SPACE(n):產生 n 個空白STUFF(str, start, len, new):刪除指定區段並插入新字串(比 REPLACE 精準)CAST(expr AS datatype[(len)])
CONVERT(datatype[(len)], expr [, style])
CONVERT 獨有 style 參數,可格式化日期/時間(如 120 = 'yyyy-mm-dd hh:mi:ss')。
關鍵限制:
+ 標記| 函數 | 回傳 | 備註 |
|---|---|---|
DAY/ MONTH/ YEAR(date) | int | 等同 DATEPART(dd/mm/yy, date) |
DATEADD(part, n, date) | datetime | part: year, quarter, month, day, hour, minute, second, ms |
DATEDIFF(part, d1, d2) | int | d2 - d1 的間隔數,帶正負號 |
DATENAME(part, date) | nvarchar | 如月份名稱 'January' |
DATEPART(part, date) | int | 數值形式 |
GETDATE() | datetime | 系統當前時間 |
實戰小撇步: 需移除字串中所有空白?REPLACE(REPLACE(REPLACE(col, CHAR(9), ''), CHAR(10), ''), CHAR(13), '') 一次搞定 Tab、換行、回車。