SQL Server STUFF 函数:在字符串中插入子字符串
在 SQL Server 中,STUFF()
函数将一个字符串插入到另一个字符串中。它从第一个字符串的指定位置开始删除指定数量的字符,并从该位置插入给定的第二个字符串。
STUFF(string_expression, start, length, replacementString)
参数
- string_expression:字符数据字符串。它可以是常量、变量或字符或二进制数据的表列。
- Start:一个整数,指定删除和插入的起始位置。如果 start 为负数、零或比第一个表达式长,则
STUFF()
函数返回 NULL。Start 也可以是 bigint 类型。 - Length:要从第一个字符串中删除的字符数。它是一个整数。
- replacementString:应在 string_expression 中替换的子字符串。
返回值
如果 string_expression 是字符数据类型,则返回字符数据。
- 如果 length 为负数,则返回 NULL。
- 如果 length 比第一个字符串或 string_expression 长,则整个 string_expression 都将被删除。
- 如果 length 为零,则函数将在 string_expression 的开头插入 replacementString。不从 string_expression 中删除任何字符。
示例 1
在下面的简单示例中,给定字符串 'abcdefgh' 从第三个字符开始,长度为六个字符,被 'xxxx' 替换。
示例:STUFF()
SELECT STUFF('abcdefgh',3,6,'xxxx') AS Result;

示例 2
在下面的示例中,'nice' 被删除并替换为 'good'。
示例:STUFF()
SELECT STUFF('Have a nice day!',8,4,'good') AS Result

示例 3
在下面的示例中,演示了不同的 start 和 length 参数。
示例:STUFF()
SELECT STUFF('Have a nice day!',0, 4, 'good') AS Result1,
STUFF('Have a nice day!', 1, 4, 'good') AS Result2,
STUFF('Have a nice day!',6, 2, 'good') AS Result3;

示例 4
在下面的示例中,STUFF()
函数用于屏蔽敏感数据,例如护照号码。护照号码的前 5 个字符被 'xxxxx' 替换,如以下查询所示。
示例:STUFF()
SELECT EmployeeID, STUFF(PassportNumber, 1, 5, 'xxxxx') FROM EmployeeDetails

示例 5
在此示例中,length 是一个负整数。返回值为 NULL。
示例:STUFF()
SELECT STUFF('Have a nice day!',1,-4,'good') AS Result;

示例 6
在下面的示例中,replacementString
是一个空字符串。因此,从第八个位置开始,长度为 4 的 string_expression 被替换为空格,如结果所示。
示例:STUFF()
SELECT STUFF('Have a nice day!',8,4,'') AS Result;

示例 7
在此示例中,STUFF()
函数用于将日期从 MMDDYYYY
格式格式化为 MM/DD/YYYY
格式。使用两个 STUFF()
函数插入 /
。一个在 DD
和 MM
之间,另一个在 MM
和 YYYY
之间,如下所示。
示例:STUFF()
SELECT STUFF(STUFF('01022022', 3,0,'/'),6,0,'/') AS Result;
