SQL Server基于正则表达式的替换函数

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

 

CREATE function dbo.regexReplace
(
@source ntext, --原字符串
@regexp varchar(1000), --正则表达式
@replace varchar(1000), --替换值
@globalReplace bit = 1, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @result varchar(5000)

exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end

return @result
end


例子:
update BOM_048 set REMARK=dbo.regexReplace(REMARK,'-[a-zA-Z]*','-',1,0) where PROPERTYFIELD='ALLINONEVER'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 中,没有内置的正则表达式函数,但是可以通过 CLR (Common Language Runtime) 集成来实现正则表达式功能。CLR 是微软 .NET Framework 中的一个组件,它允许我们在 SQL Server 中使用 C# 或 VB.NET 等 .NET 语言编写扩展函数,使得 SQL Server 具备了处理正则表达式的能力。 下面是使用 CLR 集成实现正则表达式的步骤: 1. 安装 .NET Framework 和 SQL Server。 2. 下载并安装正则表达式的 CLR 程序集。可以从 NuGet 上下载 SqlServer.Regex 库,或者从 GitHub 上下载 Microsoft.SqlServer.Regex 库。 3. 将 CLR 程序集部署到 SQL Server 中。可以使用 Visual Studio 或者 SQL Server Management Studio (SSMS) 进行部署。 4. 创建一个 SQL Server 函数,用于调用 CLR 程序集中的正则表达式函数。这个函数可以使用 SQL Server 中的 CREATE FUNCTION 语句创建。 下面是一个使用 CLR 集成实现正则表达式替换的例子: ```sql CREATE FUNCTION dbo.RegexReplace ( @input NVARCHAR(MAX), @pattern NVARCHAR(1000), @replacement NVARCHAR(1000) ) RETURNS NVARCHAR(MAX) AS EXTERNAL NAME Microsoft.SqlServer.Regex.RegexReplace; ``` 这个函数接收三个参数:输入字符串、正则表达式替换字符串。它使用 CLR 程序集 Microsoft.SqlServer.Regex 中的函数 RegexReplace 来实现正则表达式替换。 例如,可以使用这个函数将字符串中的所有数字替换为 X: ```sql SELECT dbo.RegexReplace('abc123def456', '[0-9]', 'X'); -- 输出结果为:abcXXXdefXXX ``` 需要注意的是,CLR 程序集的部署和 SQL Server 函数的创建需要具备管理员权限。另外,CLR 程序集的使用可能会影响 SQL Server 的性能和安全性,因此需要谨慎使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值