sqlserver 正则函数

参考许多资料,终于在SQLSERVER中通过函数实现正则,虽然没有编程灵活,但胜在方便简单,拿来就能用。

此函数主要用于网页,中间匹配的多个用<br>分开,可根据需要自己定义。

create FUNCTION [dbo].[regexMatch]

(
@string text,   --需要匹配的源字符串
@pattern varchar(1000)  --正则表达式 如 <cellname>([^<>]*)\<\/cellname>|<text>([^<>]*)\<\/text>
--@ignorecase bit = 0  --是否区分大小写,默认为false
)
RETURNS nvarchar(max)  
AS


BEGIN


DECLARE @objRegex INT, @retstr varchar(8000)='',@tcount int,@useint int=0
DECLARE @objMatchCollection INT,@objMatch int,@mstr varchar(1000)
    --创建对象  
    EXEC sp_OACreate 'VBScript.RegExp', @objRegex OUT  
    --设置属性  
    EXEC sp_OASetProperty @objRegex, 'Pattern', @pattern  
    EXEC sp_OASetProperty @objRegex, 'IgnoreCase', 0  
    EXEC sp_OASetProperty @objRegex, 'Global', 1  
    --执行  
    EXEC sp_OAMethod @objRegex, 'Execute', @objMatchCollection OUT, @string 


EXEC sp_OAGetProperty @objMatchCollection, 'Count', @tcount out 


while @useint<@tcount
begin
EXEC sp_OAMethod @objMatchCollection , 'Item', @objMatch OUT,@useint
EXEC sp_OAGetProperty @objMatch, 'Value', @mstr out 
set @retstr+=@mstr+'<br>'+char(13)
set @useint+=1
end


    --释放  
    EXECUTE sp_OADestroy @objRegex  
EXECUTE sp_OADestroy @objMatchCollection 
EXECUTE sp_OADestroy @objMatch 
-- RETURN @tcount
    RETURN @retstr

END

/*
 --使用时需要开启对OLE存储过程的使用:
    exec sp_configure 'Ole Automation Procedures', 1 reconfigure
 
 --在设置此配置时有可能会提示“配置选项'Ole Automation Procedures' 不存在,也可能是高级选项。”的错误,解决办法是在配置之前执行语句:
    exec sp_configure 'show advanced options',1 reconfigure
*/

使用示例


select  dbo.[regexMatch]('<emr>
<inp_info chineseName="一般信息" father="bl">
<name chineseName="姓名" vid="e5">刘洪</name>
<dept chineseName="科室" vid="e1">骨伤科</dept>
<bedno chineseName="床号" vid="e3">6530</bedno>
<sex chineseName="性别" vid="e6">男性</sex>
<age chineseName="年龄" vid="e7">53岁</age>
<marriage chineseName="婚姻" vid="e9">已婚</marriage>
<birthplace chineseName="出生地" vid="e10" fwDate="2017-09-06 17:09:47.164" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:09:47.168">市中区白马镇</birthplace>
<profession chineseName="职业" vid="e8" fwDate="2017-09-06 17:09:40.291" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:09:40.295">农民</profession>
<inhos_date chineseName="入院时间" vid="e13">2017年09月06日 15:50</inhos_date>
<jnrq chineseName="记录时间" typeid="1" vid="e15" fwDate="2017-09-06 17:10:00.915" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:10:00.918">2017年09月06日 17:00</jnrq>
<serial_number chineseName="住院号" vid="e4">0000018878</serial_number>
<nation chineseName="民族" vid="e11">汉族</nation>
<dz chineseName="地址内容" vid="e12" fwDate="2017-09-06 17:09:54.348" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:09:54.351">市中区白马镇 </dz>
</inp_info>
</emr>','chineseName="([^"]*)"|>([^<]*)<')  as ddd

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值