2023年11月30日发(作者:)

数据库中使⽤正则表达式

数据库中使⽤正则表达式

代码

CREATE FUNCTION Test (

@source varchar(5000), --需要匹配的源字符串

@regexp varchar(1000), --正则表达式

@ignorecase bit = 0 --是否区分⼤⼩写,默认为false

)

RETURNS bit --返回结果-false-true

AS

BEGIN

--0(成功)或⾮零数字(失败),是由OLE ⾃动化对象返回的HRESULT 的整数值。

DECLARE @hr integer

--⽤于保存返回的对象令牌,以便之后对该对象进⾏操作

DECLARE @objRegExp integer DECLARE @objMatches integer

--保存结果

DECLARE @results bit

/*

创建OLE 对象实例,只有sysadmin 固定服务器⾓⾊的成员才能执⾏sp_OACreate,并确定机器中有类库

*/

EXEC @hr = sp_OACreate '', @objRegExp OUTPUT

IF @hr <> 0 BEGIN

SET @results = 0

RETURN @results

END

/*

以下三个分别是设置新建对象的三个属性。下⾯是''中常⽤的属性举例:

Dim regEx,Match,Matches '建⽴变量。

Set regEx = New RegExp '建⽴⼀般表达式。

n= patrn '设置模式。

Case = True '设置是否区分⼤⼩写。

=True '设置全局可⽤性。

set Matches=e(string) '重复匹配集合

RegExpTest = e(strng) '执⾏搜索。

for each match in matches '重复匹配集合

RetStr=RetStr &"Match found at position "

RetStr=RetStr&ndex&".Match Value is '"

RetStr=RetStr&&"'."&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

--打开⾼级选项

sp_configure 'show advanced options',1

reconfigure

--设置选项打开

sp_configure 'Ole Automation Procedures',1

reconfigure