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

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>’


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值