关于SQLSERVER中使用正则表达式的方式
发布时间:2020-12-12 13:06:56 所属栏目:MsSql教程 来源:网络整理
导读:关于SQLSERVER中使用正则表达式的方式 1、在SQLSERVER中创建内置函数 例如: ----------------------------------------------------------------------------------------------------- CREATE FUNCTION dbo.RegExpTest ( @source varchar(5000),--需要匹配
关于SQLSERVER中使用正则表达式的方式 1、在SQLSERVER中创建内置函数 例如: ----------------------------------------------------------------------------------------------------- CREATE FUNCTION dbo.RegExpTest ( @source varchar(5000),--需要匹配的源字符串 @regexp varchar(1000),--正则表达式 @ignorecase bit = 0 --是否区分大小写,默认为false ) RETURNS bit --返回结果0-false,1-true AS BEGIN --0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。 DECLARE @hr integer --用于保存返回的对象令牌,以便之后对该对象进行操作 DECLARE @objRegExp integer DECLARE @objMatches integer --保存结果 DECLARE @results bit /* 创建 OLE 对象实例,只有 sysadmin 固定服务器角色的成员才能执行 sp_OACreate,并确定机器中有VBScript.RegExp类库 */ EXEC @hr = sp_OACreate 'VBScript.RegExp',@objRegExp OUTPUT IF @hr <> 0 BEGIN SET @results = 0 RETURN @results END /* 以下三个分别是设置新建对象的三个属性。下面是'VBScript.RegExp'中常用的属性举例: Dim regEx,Match,Matches '建立变量。 Set regEx = New RegExp '建立一般表达式。 regEx.Pattern= patrn '设置模式。 regEx.IgnoreCase = True '设置是否区分大小写。 regEx.Global=True '设置全局可用性。 set Matches=regEx.Execute(string) '重复匹配集合 RegExpTest = regEx.Execute(strng) '执行搜索。 for each match in matches '重复匹配集合 RetStr=RetStr &"Match found at position " RetStr=RetStr&Match.FirstIndex&".Match Value is '" RetStr=RetStr&Match.Value&"'."&vbCRLF Next RegExpTest=RetStr */ EXEC @hr = sp_OASetProperty @objRegExp,'Pattern',@regexp IF @hr <> 0 BEGIN SET @results = 0 RETURN @results END EXEC @hr = sp_OASetProperty @objRegExp,'Global',false IF @hr <> 0 BEGIN SET @results = 0 RETURN @results END EXEC @hr = sp_OASetProperty @objRegExp,'IgnoreCase',@ignorecase IF @hr <> 0 BEGIN SET @results = 0 RETURN @results END --调用对象方法 EXEC @hr = sp_OAMethod @objRegExp,'Test',@results OUTPUT,@source IF @hr <> 0 BEGIN SET @results = 0 RETURN @results END --释放已创建的 OLE 对象 EXEC @hr = sp_OADestroy @objRegExp IF @hr <> 0 BEGIN SET @results = 0 RETURN @results END RETURN @results END ------------------------------------------------------------------------------------------- 2、在直接使用的时候可能会报错: 消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件“Ole Automation Procedures”的 过程“sys.sp_OACreate”的访问,因为此组件已作为此服务器安全配置的一部分而被 关闭。系统管理员可以通过使用 sp_configure 启用“Ole Automation Procedures”。有关启用“Ole Automation Procedures”的详细信息,请搜 索 SQL Server 联机丛书中的“Ole Automation Procedures”。 这是因为数据库组织了ole组件的使用(为什么会阻止,以后查看) 这里解决的办法是: --------------------------------- sp_configure 'Ole Automation Procedures',1; GO RECONFIGURE; GO EXEC sp_configure 'Ole Automation Procedures'; GO--------------------------------- 3、下面就可以使用了 select * from A where XXDB.dbo.RegExpTest(UserName,'^[a-z]{3}[a-z]*j$',0)>0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |