STUFF:在字串指定位置刪除指定長度,並插入新字串。
語法:STUFF ( character_expression , start , length , replacement_expression )
| 參數 | 類型 | 說明 |
|---|---|---|
| character_expression | 字串/二進制 | 目標運算對象(常數/變數/欄位) |
| start | int/bigint | 刪除/插入起始位置(1-based),負值或超長返回空字串 |
| length | int/bigint | 刪除字符數,超長則刪至結尾 |
| replacement_expression | 字串/二進制 | 插入的新字串 |
-- 在 'abcdef' 第 2 位刪 3 字符 (bcd),插入 'ijklmn'
SELECT STUFF('abcdef', 2, 3, 'ijklmn')
-- 結果:aijklmnef
DECLARE @dt CHAR(10) = '2024-01-15' SELECT STUFF(STUFF(@dt, 5, 1, '/'), 8, 1, '/') -- 2024/01/15
DECLARE @id VARCHAR(18) = 'A123456789' SELECT STUFF(@id, 2, 6, '******') -- A******789 DECLARE @phone VARCHAR(10) = '0912345678' SELECT STUFF(@phone, 4, 4, '****') -- 091****678
DECLARE @cols VARCHAR(MAX) = 'col1,col2,col3,' SELECT STUFF(@cols, LEN(@cols), 1, '') -- col1,col2,col3
SELECT STUFF((
SELECT ',' + name FROM sys.tables FOR XML PATH('')
), 1, 1, '') -- 去除首逗號:table1,table2,table3
| 函數 | 核心能力 | 適用場景 |
|---|---|---|
| STUFF | 定位刪除+插入 | 精確位置手術式替換、遮罩、格式化 |
| REPLACE | 全域字符替換 | 所有匹配字符統一替換 |
| SUBSTRING | 單純截取 | 提取子串、不修改原串 |
STUFF 是字串「微手術」工具:精確定位、刪除、插入一氣呵成。掌握它能優雅解決遮罩、格式化、動態 SQL 拼接等高頻需求。