加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer替换第一个匹配的字符串方法

发布时间:2020-12-12 13:06:30 所属栏目:MsSql教程 来源:网络整理
导读:SqlServer中,并不直接支持字符串的正则表达式操作,一些特殊的字符串操作需求需要分多个步骤来完成。 有时候,我们会碰到仅需要替换字符串中某个文本第一次出现的内容,此时无法直接用replace来完成,可以 分解为以下两个步骤 : 1)找出文本在字符串的第一

SqlServer中,并不直接支持字符串的正则表达式操作,一些特殊的字符串操作需求需要分多个步骤来完成。


有时候,我们会碰到仅需要替换字符串中某个文本第一次出现的内容,此时无法直接用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
GO

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

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

可以调用:

select
dbo.replaceFirst(
    dbo.replaceFirst('<div>我不需要块元素</div><div>我是块一</div><div>我是块二</div>','<div>',''
    ),'</div>',''
)
结果为:‘我不需要块元素<div>我是块一</div><div>我是块二</div>’

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读