有替换字符串的需求时,我们第一个想到的函数一定是
REPLACE函数,但REPLACE函数会替换字符串的所有的匹配结果,如果我们只想要替换匹配结果中的第一个要怎么处理呢?用REPLACE肯定是不行了,我们可以借助
STUFF来实现。
STUFF用法1、作用:删除指定长度的字符,并在指定的起点处插入另一组字符。
2、语法:STUFF ( character_expression , start , length ,character_expression )
3、示例:以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串
SELECT STUFF('abcdef', 2, 3, 'mn')
GO
最后结果是:amnef
有了上面的示例,我们创建一个自定义函数,代码如下:
Create FUNCTION [dbo].[fn_ReplaceFirst]
(
@source nvarchar(max), @findStr nvarchar(1000), @repStr nvarchar(1000)
)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @ResultVar nvarchar(max)
DECLARE @Pos int
set @Pos = CHARINDEX(@findStr, @source)
if @Pos = 0
return @source
set @ResultVar = stuff(@source, @Pos, len(@findStr), @repStr)
RETURN @ResultVar
END
调用结果如下:
可以看到到,fn_ReplaceFirst函数只替换了第一个abc,而REPLACE函数替换了所有的abc。