STUFF字符串函數是將字符串插入到另一個字符串中。它會刪除開始位置第一個字符串中的指定長度的字符,然後將第二個字符串插入到開始位置的第一個字符串中,語法如下:
STUFF(字符串/變量/列,開始位置,長度,字符串/變量/列)
姓名中間插入暱稱
DECLARE @FullName VARCHAR(100)
DECLARE @Alias VARCHAR(20)
SET @FullName = 'Jeffcky Wang'
SET @Alias = ' "Superman" '
SELECT STUFF(@FullName, CHARINDEX(' ', @FullName), 1, @Alias) AS [FullName]
字符串轉爲時間格式
DECLARE @Time VARCHAR(10)
SET @Time = '1030'
SELECT STUFF(@Time, 3, 0, ':') AS [HH:MM]
身份證尾號用X代替
DECLARE @CreditCardNumber VARCHAR(20)
SET @CreditCardNumber = '370200199408103544'
SELECT STUFF(@CreditCardNumber, LEN(@CreditCardNumber) -3, 4,'XXXX') AS [Output]
字符串的拼接
CREATE TABLE [dbo].[types]([id] [int] NOT NULL,[type] [varchar](50));
INSERT INTO types VALUES(1,'apple')
INSERT INTO types VALUES(2,'honor')
INSERT INTO types VALUES(3,'oppo')
INSERT INTO types VALUES(3,'vivo')
STUFF最常見的用途莫過於結合FOR XML PATH對返回JSON字符串的拼接。
-- 元素前加逗號
SELECT ',' + type FROM types FOR XML PATH ('')
-- 去除最前元素的逗號
SELECT Name = STUFF((SELECT TOP 5 ',' + type FROM types FOR XML PATH('')), 1, 1, '')
字符串聚合拼接 列值合併
SELECT [id], STUFF(
( SELECT ','+ [type]
FROM types b
WHERE b.id = a.id
FOR XML PATH('')),1 ,1, '') [類型]
from types a
group by [id]