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]