zoukankan      html  css  js  c++  java
  • 在SQL使用正则表达式

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetValuebyregep]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[GetValuebyregep]
    GO

    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_NULLS ON
    GO

    CREATE FUNCTION dbo.GetValuebyregep
     (
      @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

    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS ON
    GO

  • 相关阅读:
    [BTS2004]一步一步学习BizTalk2004 CBR(contentbased routing)
    [BTS06]BizTalk2006 SDK阅读笔记(六) 定义流程
    [JS]收藏
    [BTS06]BizTalk2006 SDK阅读笔记(七) 管理与监控
    [C#]关于调用Office应用程序后,程序不退出的问题
    [JS]让表单提交返回后保持在原来提交的位置上
    [BTS][收藏]啥时候用BTS,啥时候用WF,就看这里。
    [BTS06]BizTalk2006 SDK阅读笔记(一) 角色
    [BTS]BizTalk学习之Functoid篇(Database Lookup)
    [LCS]半个月的成果,用RTCClient开发的Robot!
  • 原文地址:https://www.cnblogs.com/BlogNetSpace/p/1275910.html
Copyright © 2011-2022 走看看