SQL STUFF 函数

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'
SQL STUFF Function Example 1

下面几行 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 替换为正数,或查看下一个示例。

STUFF FUNCTION 2

使用 SQL STUFF 函数更改电子邮件 ID

在此示例中,我们将使用 STUFF 函数更改 Email 列中存在的电子邮件 ID。以下查询将删除 @ 符号之前的字符,并插入 [LastName] 列数据。

SELECT [FirstName]
      ,[LastName]
      ,[DepartmentName]
      ,[Email]
      ,STUFF (
               [Email]
              ,1
       ,CHARINDEX('@',[Email]) - 1
       ,[LastName]
            ) AS [SQL SUBSTRING]
 FROM [Employe]
STUFF FUNCTION to Change Email Ids 3

以下语句将返回 @ 符号的索引位置。这意味着 CHARINDEX 函数 将检查每个记录中 @ 符号的索引位置。接下来,我们从索引位置减去一,因为我们想替换此符号之前的字符。

CHARINDEX ('@', [Email]) - 1

以下语句将从索引位置 1 到 @ 符号删除字符,然后使用此方法在该位置插入 [LastName] 数据。

STUFF (
       [Email]
      ,1
      ,CHARINDEX('@',[Email]) - 1
      ,[LastName]
     ) AS [SQL SUBSTRING]