| 函數 | 用途 | 回傳型別 | 備註 |
|---|---|---|---|
| LEN(str) | 字串長度 (不含尾端空白) | INT | 輸入 NULL 回傳 NULL |
| LOWER(str) | 轉小寫 | VARCHAR/NVARCHAR | |
| UPPER(str) | 轉大寫 | VARCHAR/NVARCHAR | |
| LTRIM(str) | 移除左側空白 | VARCHAR/NVARCHAR | 不處理中間空白 |
| RTRIM(str) | 移除右側空白 | VARCHAR/NVARCHAR | |
| SUBSTRING(str, start, len) | 取子字串 (起始位置從 1 算起) | VARCHAR/NVARCHAR | start=0 視同空字串 |
| CHARINDEX(sub, str) | 搜尋子字串位置 (1-based, 0=找不到) | INT | 不區分大小視定序而定 |
| LEFT(str, len) | 取左側 N 字元 | VARCHAR/NVARCHAR | 等同 SUBSTRING(str,1,len) |
| RIGHT(str, len) | 取右側 N 字元 | VARCHAR/NVARCHAR | 等同 SUBSTRING(str, LEN-len+1, len) |
| REPLACE(str, old, new) | 取代所有符合的子字串 | VARCHAR/NVARCHAR | new='' 可作刪除用 |
| ASCII(str) | 取第一字元 ASCII 碼 | INT | NULL/空字串回傳 NULL |
| CHAR(code) | ASCII 碼轉字元 | CHAR(1) | |
| DIFFERENCE(str1, str2) | 發音相似度 0~4 (SOUNDEX 差異) | INT | 值越大越相似 |
SELECT LTRIM(RTRIM(' abc ')); -- 'abc'
SELECT REPLACE(' a b c ', ' ', ''); -- 'abc'
DECLARE @f VARCHAR(100) = 'report_2023.pdf';
SELECT LEFT(@f, CHARINDEX('.', @f) - 1); -- 'report_2023'
SELECT RIGHT(@f, CHARINDEX('.', REVERSE(@f)) - 1); -- 'pdf'
SELECT LEFT(id, 3) + REPLICATE('X', LEN(id)-5) + RIGHT(id, 2)
FROM Customers;
-- 簡易版:固定分隔符 ','
DECLARE @s VARCHAR(100) = 'a,b,c,d';
WITH cte AS (
SELECT 1 AS pos, CHARINDEX(',', @s) AS nxt
UNION ALL
SELECT nxt+1, CHARINDEX(',', @s, nxt+1) FROM cte WHERE nxt > 0
)
SELECT SUBSTRING(@s, pos, CASE WHEN nxt>0 THEN nxt-pos ELSE LEN(@s)+1 END) AS token
FROM cte;
所有字串函數輸入 NULL 皆回傳 NULL (除 ISNULL/COALESCE 外)。建議查詢前用 ISNULL(col, '') 預處理。
WHERE 條件對欄位使用函數 (如 WHERE LEFT(col,3)='abc'),會導致索引掃描;改寫為 WHERE col LIKE 'abc%'。REPLACE、SUBSTRING 在巨量列上較耗 CPU,必要時建立計算欄位持久化。