现在的位置: 网页制作教程网站制作经验 >正文
数据库教程

Sqlserver如何只替换第一个出现的匹配项

发表于2020/4/30 网站制作经验 0条评论 ⁄ 热度 374℃

有时候,我们会碰到仅需要替换字符串中某个文本第一次出现的内容,此时无法直接用replace来完成,可以分解为以下两个步骤:

1.找出文本在字符串的第一次出现的位置,使用 charindex 函数可完成;

2.替换从找到的位置开始,长度为搜索文本长度范围的字符串,stuff 函数可以实现。

写成函数即如下:

CREATE FUNCTION dbo.ReplaceFirst 
(
@source nvarchar(max), @find nvarchar(1000), @repl nvarchar(1000)
)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @ResultVar nvarchar(max)  -- return value
DECLARE @Pos int                  -- find the first position 
set @Pos = CHARINDEX(@find, @source)

-- not found, return orginal 
if @Pos = 0 return @source 

set @ResultVar = stuff(@source, @Pos, len(@find), @repl)

-- Return the result of the function
RETURN @ResultVar

END

举例,如下字符串,希望把第一个div块标签去掉:

'<div>我不需要块元素</div><div>我是块一</div><div>我是块二</div>'

可以调用:

select
dbo.replaceFirst(
dbo.replaceFirst('<div>我不需要块元素</div><div>我是块一</div><div>我是块二</div>', 
'<div>', 
''
),
'</div>',
''
)

结果为:‘我不需要块元素<div>我是块一</div><div>我是块二</div>’

  • 暂无评论