zoukankan      html  css  js  c++  java
  • MSsql server 正则函数

    实际工作中,我们可能会使用数据库截取处理字符串这里有两种方式

    一、.net写代码函数 编译成dll,然后数据库引用dll,从而调用dll里面的函数

    二、直接通过数据库自带的OLE 创建VBScript.RegExp对象编写数据库函数

    这里介绍第二种

    以下为函数

    /*
    --使用时需要开启对OLE存储过程的使用:
    exec sp_configure 'Ole Automation Procedures', 1 reconfigure

    --在设置此配置时有可能会提示“配置选项'Ole Automation Procedures' 不存在,也可能是高级选项。”的错误,解决办法是在配置之前执行语句:
    exec sp_configure 'show advanced options',1 reconfigure

    你可以理解,正则表达式((?!hede).)*匹配字符串"ABhedeCD"的结果false,因为在e3位置,(?!hede)匹配不合格,它之前有"hede"字符串,也就是包含了指定的字符串。

    在正则表达式里, ?! 是否定式向前查找,它帮我们解决了字符串“不包含”匹配的问题。

    */
    /****** Object: UserDefinedFunction [dbo].[regexMatch] Script Date: 2017/3/17 10:55:30 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    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),@tmpstr 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
    if @tmpstr!=@mstr
    begin
    set @retstr+=@mstr+'<br>'+char(13)
    end
    set @useint+=1
    set @tmpstr=@mstr
    end

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

    以下为测试文本

    select dbo.[regexMatch]('<emr>
    <inp_info chineseName="一般信息" father="bl">
    <ch>  </ch>
    <jzsj>  </jzsj>
    <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>
    </inp_info>
    <nation chineseName="民族" vid="e11">汉族</nation>
    <zzdz chineseName="地址" father="dz">
    <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>
    </zzdz>
    <bl>
    <blnr chineseName="病史内容">  </blnr>
    <bscsz chineseName="病史陈述者">         </bscsz>
    <bscszy chineseName="月">  </bscszy>
    <bscszr chineseName="日">  </bscszr>
    <bscszs chineseName="时">  </bscszs>
    <bscszf chineseName="分">  </bscszf>
    <bsssqm chineseName="病史属实,签名">  </bsssqm>
    <o1 vid="e16" fwDate="2017-09-06 17:10:04.404" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:10:04.407">本人及其女</o1>
    <o2 vid="e17">可靠</o2>
    <o3 vid="e18" fwDate="2017-09-06 17:10:08.716" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:10:08.719">处暑  </o3>
    <o4 vid="e19">  </o4>
    <o5 vid="e22" fwDate="2017-09-06 17:10:18.996" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:10:18.999">跌伤致右侧肩锁部肿痛、疼痛、活动受限1小时</o5>
    <o6 vid="e23" fwDate="2017-09-06 17:11:20.960" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:11:20.963"> 病员及其女自诉入院于2017年09月06日下午2点过,因骑电瓶车不慎跌倒,致右肩锁部,右额部受伤,伤后感上述部位疼痛,活动受限,无头晕,头痛,昏迷,恶心,呕吐。在外未做任何治疗,由家属急送来我院,急诊予以收入本科治疗。现病员神清神差,伤后未进食,未排二便。 </o6>
    <o7 vid="e24" fwDate="2017-09-06 17:16:18.629" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:26:31.828">有慢性胃炎病史。右耳听力下降。6年前曾行开颅手术。否认有肝炎、结核等传染病史,否认有高血压,糖尿病等内科疾患史。否认输血史。否认药敏史,预防接种史不详。  </o7>
    <o8 vid="e25" fwDate="2017-09-06 17:16:27.036" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:26:33.748">生居当地,生活无不良嗜好。 </o8>
    <o9>  </o9>
    <o10 vid="e27" fwDate="2017-09-06 17:26:36.138" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:26:36.141">否认家族病史。 </o10>
    <o11 vid="e28" fwDate="2017-09-06 17:20:07.284" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:26:38.800">发育正常,营养中等,体型适中,神志清楚,表情痛苦,语声清晰,查体合作,扶入病房。舌质淡红,苔薄白,脉弦。 </o11>
    <o12 vid="e29" fwDate="2017-09-06 17:20:34.720" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:20:34.723"> 36.6 </o12>
    <o13 vid="e30" fwDate="2017-09-06 17:20:39.055" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:20:39.058"> 82</o13>
    <o14 vid="e31">20</o14>
    <o15 vid="e32" fwDate="2017-09-06 17:20:48.081" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:20:48.084">128/73</o15>
    <o16 vid="e33" fwDate="2017-09-06 17:21:20.256" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:21:20.260"> 全身皮肤粘膜未见黄染淤斑,浅表淋巴结未扪及肿痛。胸廓无畸形,呼吸均匀,双肺呼吸音稍促,未闻及干湿鸣音,胸廓挤压痛阴性,心界大小正常,心率872次/分,无病理性杂音。腹部平软,无压痛反跳痛及肌紧张,肝脾未扪及肿痛,双肾区无叩击痛,无移动性浊音,肠鸣音正常,肛门外生殖器未查,脊柱,双下肢,左上肢无压痛,叩击痛,右上肢见专科情况。神经系统生理反射存在,病理征未引出。</o16>
    <o17 vid="e34" fwDate="2017-09-06 17:22:26.027" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:26:22.061"> 右锁骨中份瘀紫肿胀明显,压叩痛剧烈,扪及骨擦感,纵轴挤压试验因疼痛无法进行,右手各指感觉、运动、血循尚可。左额部皮肤擦伤,无渗血,双侧瞳孔等大等圆,光反射灵敏,眼,耳,口,鼻腔未见血性分泌物。</o17>
    <o18 vid="e35" fwDate="2017-09-06 17:24:26.707" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:26:14.782">DR片:(2017.09.06.285025 乐山市中医医院)1、双肺纹理增多,心脏稍大。2、右侧锁骨骨折,断端上下错位,断端周围可见游离小骨片影。</o18>
    <o19 vid="e36" fwDate="2017-09-06 17:26:06.947" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:26:06.949"><![CDATA[1、右锁骨粉碎性骨折<BR>2、右额部皮肤擦伤<BR>3、慢性胃炎<BR>&nbsp;骨断筋伤,血瘀气滞]]></o19>
    <o20 vid="e37" fwDate="2017-09-06 17:25:44.874" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-07 13:44:03.378"><![CDATA[1、右锁骨粉碎性骨折<BR>2、右额部皮肤擦伤<BR>3、慢性胃炎]]></o20>
    <o21 vid="e38">熊淑云 </o21>
    <o22>  </o22>
    <o23>  </o23>
    <o24>  </o24>
    <o25>  </o25>
    <o26>  </o26>
    <o27 vid="e39">曹忠 </o27>
    <o28 vid="e26" fwDate="2017-09-06 17:18:51.450" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:26:35.039">已婚,育1女。  </o28>
    <qzsj_1 chinsesName="签名时间" typeid="1" vid="e21">  </qzsj_1>
    <qzsj_2 chinsesName="签名时间" typeid="1" vid="e41" fwDate="2017-09-06 17:25:51.243" fmDepart="7107" fmLevel="1" fmId="271" fmDate="2017-09-06 17:25:51.246">2017年09月06日 17:20</qzsj_2>
    <twnr chineseName="体温内容">  </twnr>
    <mbnr chineseName="脉搏内容">  </mbnr>
    <hxnr chineseName="呼吸内容">  </hxnr>
    <xynr chineseName="血压内容">  </xynr>
    <tgjcnr chineseName="体格检查内容">  </tgjcnr>
    <fzjcnr chineseName="辅助内容">  </fzjcnr>
    <zljh chineseName="诊疗计划">  </zljh>
    </bl>
    <zs chineseName="主诉" father="zs">
    <zsnr chineseName="主诉内容">  </zsnr>
    </zs>
    <xbs chineseName="现病史" father="xbs">
    <xbsnr chineseName="现病史内容">  </xbsnr>
    </xbs>
    <jws chineseName="既往史" father="jws">
    <jwsnr chineseName="既往史内容">  </jwsnr>
    </jws>
    <grs chineseName="个人史" father="grs">
    <grsnr chineseName="个人史内容">  </grsnr>
    </grs>
    <hys chineseName="婚育史" father="hys">
    <hysnr chineseName="婚育史内容">  </hysnr>
    </hys>
    <jzs chineseName="家族史" father="jzs">
    <jzsnr chineseName="家族史内容">  </jzsnr>
    </jzs>
    <zkjc chineseName="专科情况" father="zkjc">
    <zkjcnr chineseName="专科内容">  </zkjcnr>
    <cbzd1 chineseName="初步诊断" knowledgebase="ICD_10" typeid="4">...</cbzd1>
    <signature3 autoSignature="true" chineseName="医生签名" typeid="5">[医生签名]</signature3>
    <xzzd1 chineseName="修正诊断" knowledgebase="ICD_10" typeid="4">...</xzzd1>
    <signature4 autoSignature="true" chineseName="医生签名" typeid="5">[医生签名]</signature4>
    </zkjc>
    <yishengqianming chineseName="医生签名" father="ysqm">
    <signature autoSignature="true" chineseName="医生签名" typeid="5">[医生签名]</signature>
    </yishengqianming>
    <xzzd chineseName="修正诊断" father="xzzd" vid="e42" xzzdflag=""/>
    <cbzd chineseName="初步诊断" knowledgebase="ICD_10" typeid="4">...</cbzd>
    <signature1 autoSignature="true" chineseName="医生签名" typeid="5">[医生签名]</signature1>
    <xzzd chineseName="修正诊断" knowledgebase="ICD_10" typeid="4">...</xzzd>
    <signature2 autoSignature="true" chineseName="医生签名" typeid="5">[医生签名]</signature2>
    <ysqmsj chineseName="医生签名" typeid="5">  </ysqmsj>
    <sjysqmsj chineseName="签名日期" typeid="1">[签名日期]</sjysqmsj>
    <ywgms chineseName="药物过敏史">  </ywgms>
    <lxdh>  </lxdh>
    <m.54>    </m.54></emr>','vid="e([^>]*)>([^<>s]*)') as ddd

  • 相关阅读:
    32-数据链路层,PPP协议
    31-NAT
    30-安全技术,ACL
    ensp实验:配置DHCP
    29-应用层,DHCP协议
    ensp实验:配置stp
    28-STP,选举过程、端口状态、计时器、拓扑变化
    27-交换机,STP
    26-交换机,GVRP
    Manually APK Downgrade for split apks
  • 原文地址:https://www.cnblogs.com/tobase/p/11690419.html
Copyright © 2011-2022 走看看