SQL Server 的 STUFF 函数将一个字符串插入到另一个字符串中。STUFF 函数的语法如下所示。
SELECT STUFF (Character_Expression, Starting_Position, Length, New_String) FROM [Source]
- Character_Expression:您希望通过此 SQL Server Stuff 函数插入 New_String 的字符串。
- Starting_Position:您希望从哪个索引位置开始插入 New_String 字符。
- Length:您希望从 Character_Expression 中删除多少个字符?它将从 Starting_Position 开始,并从 Character_Expression 中删除指定数量的字符。
- New_String:您想在 Starting_Position 将新字符串插入 Character_Expression 中
我们将使用下面显示的数据来解释 Stuff 函数。

SQL STUFF 函数示例
字符串 STUFF 函数将新字符串存储到旧字符串中。它向您展示了使用 STUFF 的多种方法。
DECLARE @Character_Expression varchar(50) SET @Character_Expression = 'Learn Server' -- Starting Position = 6 and End Position = 0 SELECT STUFF (@Character_Expression, 6, 0, ' SQL') AS 'SQLSTUFF' -- Starting Position = 7 and End Position = 6 SELECT STUFF (@Character_Expression, 7, 6, 'SQL') AS 'SQLSTUFF' -- Starting Position = 1 and End Position = 5 SELECT STUFF (@Character_Expression, 1, 5, '') AS 'SQLSTUFF' -- Starting Position = 20 and End Position = 5 SELECT STUFF (@Character_Expression, 20, 5, 'SQL ') AS 'SQLSTUFF'

下面几行 Server 代码用于声明字符串变量并分配字符串数据。
DECLARE @Character_Expression varchar(50) SET @Character_Expression = 'Learn Server'
我们为起始位置分配了 6,为结束位置分配了 0。因此,此 字符串函数 将从索引位置 6 开始删除 0 个字符,并在索引位置 6 处插入文本。
-- Starting Position = 6 and End Position = 0
我们分配了起始位置 7,结束位置 6。因此,此 Stuff 函数将从索引位置 7 开始删除五个字符,并将其插入到该位置。
-- Starting Position = 7 and End Position = 6
在这里,我们将起始位置设置为 1,结束位置设置为 5,第四个参数为空。因此,它会删除从索引 1 到 5 的字符,并返回剩余的字符串。
-- Starting Position = 1 and End Position = 5 SELECT STUFF (@Character_Expression, 1, 5, '') AS 'SQLSTUFF'
在下一行,我们将第二个参数设置为 20,这大于字符串长度,因此它将返回 NULL。
-- Starting Position = 20 and End Position = 5 SELECT STUFF (@Character_Expression, 20, 5, 'SQL ') AS 'SQLSTUFF'
STUFF 示例 2
SQL Server STUFF 函数还允许您在列值中将新字符串添加到旧字符串。在此示例中,我们在索引位置 1 处的 Email 列中插入 [LastName]。
SELECT [FirstName]
,[LastName]
,[DepartmentName]
,[Email]
,STUFF (
[Email]
,1
,0
,[LastName]
) AS [SQL SUBSTRING]
FROM [Employe]
在这里,它没有从电子邮件中删除任何字符。它只是将姓氏添加到了那里,因为我们将第三个参数用作 0。如果您想删除一些字符,请将 0 替换为正数,或查看下一个示例。

使用 SQL STUFF 函数更改电子邮件 ID
在此示例中,我们将使用 STUFF 函数更改 Email 列中存在的电子邮件 ID。以下查询将删除 @ 符号之前的字符,并插入 [LastName] 列数据。
SELECT [FirstName]
,[LastName]
,[DepartmentName]
,[Email]
,STUFF (
[Email]
,1
,CHARINDEX('@',[Email]) - 1
,[LastName]
) AS [SQL SUBSTRING]
FROM [Employe]

以下语句将返回 @ 符号的索引位置。这意味着 CHARINDEX 函数 将检查每个记录中 @ 符号的索引位置。接下来,我们从索引位置减去一,因为我们想替换此符号之前的字符。
CHARINDEX ('@', [Email]) - 1
以下语句将从索引位置 1 到 @ 符号删除字符,然后使用此方法在该位置插入 [LastName] 数据。
STUFF (
[Email]
,1
,CHARINDEX('@',[Email]) - 1
,[LastName]
) AS [SQL SUBSTRING]