`
yaozuodaoforfly
  • 浏览: 119069 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

sql正则表达式

 
阅读更多

 

IF OBJECT_ID(N'dbo.RegexFind') IS NOT NULL 

    DROP FUNCTION dbo.RegexFind

GO

create function RegexFind(

    @pattern VARCHAR(255),

    @matchstring VARCHAR(8000),

    @global BIT = 1,

@Multiline bit =1)

returns

    @result TABLE

        (

 Match_ID INT,

          FirstIndex INT ,

          length INT ,

          Value VARCHAR(2000),

          Submatch_ID INT,

          SubmatchValue VARCHAR(2000),

 Error Varchar(255)

        )

 

 

AS -- columns returned by the function

begin

    DECLARE @objRegexExp INT,

        @objErrorObject INT,

        @objMatch INT,

        @objSubMatches INT,

        @strErrorMessage VARCHAR(255),

@error varchar(255),

        @Substituted VARCHAR(8000),

        @hr INT,

        @matchcount INT,

        @SubmatchCount INT,

        @ii INT,

        @jj INT,

        @FirstIndex INT,

        @length INT,

        @Value VARCHAR(2000),

        @SubmatchValue VARCHAR(2000),

        @objSubmatchValue INT,

        @command VARCHAR(8000),

        @Match_ID INT

        

    DECLARE @match TABLE

        (

          Match_ID INT IDENTITY(1, 1)NOT NULL,

          FirstIndex INT NOT NULL,

          length INT NOT NULL,

          Value VARCHAR(2000)

        )    

    DECLARE @Submatch TABLE

        (

          Submatch_ID INT IDENTITY(1, 1),

          match_ID INT NOT NULL,

          SubmatchNo INT NOT NULL,

          SubmatchValue VARCHAR(2000)

        )

 

 

 

    set  @strErrorMessage = 'creating a regex object';

set @error='';

    EXEC @hr= sp_OACreate 'VBScript.RegExp', @objRegexExp OUT

    IF @hr = 0 

        set  @strErrorMessage = 'Setting the Regex pattern';

        set @objErrorObject = @objRegexExp

    IF @hr = 0 

        EXEC @hr= sp_OASetProperty @objRegexExp, 'Pattern', @pattern

    IF @hr = 0 

        set  @strErrorMessage = 'Specifying a case-insensitive match' 

    IF @hr = 0 

        EXEC @hr= sp_OASetProperty @objRegexExp, 'IgnoreCase', 1

    IF @hr = 0 

        EXEC @hr= sp_OASetProperty @objRegexExp, 'MultiLine', @Multiline

    IF @hr = 0 

        EXEC @hr= sp_OASetProperty @objRegexExp, 'Global', @global

    IF @hr = 0 

        set  @strErrorMessage = 'Doing a match' 

    IF @hr = 0 

        EXEC @hr= sp_OAMethod @objRegexExp, 'execute', @objMatch OUT,

            @matchstring

    IF @hr = 0 

        set  @strErrorMessage = 'Getting the number of matches'     

    IF @hr = 0 

        EXEC @hr= sp_OAGetProperty @objmatch, 'count', @matchcount OUT

 

    set  @ii = 0;

    WHILE @hr = 0 AND @ii < @Matchcount

    BEGIN

--The Match object has four read-only properties. 

--The FirstIndex property indicates the number of characters in the string to the left of the match. 

--The Length property of the Match object indicates the number of characters in the match. 

--The Value property returns the text that was matched.

            set  @strErrorMessage = 'Getting the FirstIndex property';

            set    @command = 'item(' + CAST(@ii AS VARCHAR) + ').FirstIndex'    

            IF @hr = 0 

                EXEC @hr= sp_OAGetProperty @objmatch, @command,

                    @Firstindex OUT

            IF @hr = 0 

                set  @strErrorMessage = 'Getting the length property';

                set  @command = 'item(' + CAST(@ii AS VARCHAR) + ').Length';  

            IF @hr = 0 

                EXEC @hr= sp_OAGetProperty @objmatch, @command, @Length OUT

            IF @hr = 0 

                set  @strErrorMessage = 'Getting the value property';

                set  @command = 'item(' + CAST(@ii AS VARCHAR) + ').Value';

            IF @hr = 0 

                EXEC @hr= sp_OAGetProperty @objmatch, @command, @Value OUT

            INSERT  INTO @match(Firstindex,Length,Value)

            values(@firstindex + 1,@Length, @Value);

 

            set  @Match_ID = @@Identity;

--The SubMatches property of the Match object is a collection of strings. 

--It will only hold values if your regular expression has capturing groups. 

--The collection will hold one string for each capturing group. 

--The Count property indicates the number of string in the collection. 

--The Item property takes an index parameter, and returns the text matched by the capturing group. 

--The Item property is the default member, so you can write SubMatches(7) as a shorthand to SubMatches.Item(7). 

--Unfortunately, VBScript does not offer a way to retrieve the match position and length of capturing groups.

            IF @hr = 0 

                set  @strErrorMessage = 'Getting the SubMatches collection';

                set  @command = 'item(' + CAST(@ii AS VARCHAR) + ').SubMatches';

            IF @hr = 0 

                EXEC @hr= sp_OAGetProperty @objmatch, @command,@objSubmatches OUT

            IF @hr = 0 

                set  @strErrorMessage = 'Getting the number of submatches'     

            IF @hr = 0 

                EXEC @hr= sp_OAGetProperty @objSubmatches, 'count', @submatchCount OUT

            set  @jj = 0 

            WHILE @hr = 0

                AND @jj < @submatchCount

                BEGIN

                    IF @hr = 0 

                        set  @strErrorMessage = 'Getting the submatch value property';

                        set  @command = 'item(' + CAST(@jj AS VARCHAR) + ')';

set @submatchValue=null; 

                    IF @hr = 0 

                        EXEC @hr= sp_OAGetProperty @objSubmatches, @command, @SubmatchValue OUT

                    INSERT  INTO @Submatch( Match_ID,SubmatchNo,SubmatchValue)

                    values(@Match_ID,@jj+1,@SubmatchValue);

                    set  @jj = @jj + 1

                END

            set  @ii = @ii + 1

        END

    IF @hr <> 0 

        BEGIN

            DECLARE @Source VARCHAR(255),

                @Description VARCHAR(255),

                @Helpfile VARCHAR(255),

                @HelpID INT

 

            EXECUTE sp_OAGetErrorInfo @objErrorObject, @source OUTPUT,

                @Description OUTPUT, @Helpfile OUTPUT, @HelpID OUTPUT

            set  @Error = 'Error whilst '

                    + COALESCE(@strErrorMessage, 'doing something') + ', '

                    + COALESCE(@Description, '')

        END

EXEC sp_OADestroy @objRegexExp

     EXEC sp_OADestroy @objMatch

     EXEC sp_OADestroy  @objSubMatches

 

insert into @result

          (Match_ID,

          FirstIndex,

          [length],

          [Value],

          Submatch_ID,

          SubmatchValue,

 error)

    SELECT  m.[Match_ID],[FirstIndex],[length],[Value],[SubmatchNo],[SubmatchValue],@error

FROM @match m

    LEFT OUTER JOIN   @submatchs

    ON m.match_ID=s.match_ID;

if @@rowcount=0 and len(@error)>0

insert into @result(error) select @error

return 

end

GO

 

 

 

QL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
执行下面sql语句即可:
 
[sql] 
USE master    
GO    
sp_configure 'show advanced options', 1;    
GO    
RECONFIGURE;    
GO    
sp_configure 'Ole Automation Procedures', 1;    
GO    
RECONFIGURE;    
GO    
sp_configure 'Ad Hoc Distributed Queries', 1;    
GO    
RECONFIGURE;    
GO    
分享到:
评论

相关推荐

    ORACLESQL正则表达式.pdf

    ORACLE SQL正则表达式.pdf 正则表达式是在 Oracle 10g 中添加的新特性,用于匹配字符串中的模式。下面是 ORACLE SQL 正则表达式的相关知识点: 匹配字符 * `[:alnum:]` 匹配任何字母和数字 * `[:alpha:]` 匹配...

    正则表达式在数据库查询中的应用

    这里,`REGEXP`是正则表达式的SQL谓词,`'^[ABCD].*P$'`是一个正则表达式,其中: - `^` 表示字符串的起始位置; - `[ABCD]` 匹配“A”、“B”、“C”或“D”中的任意一个字符; - `.*` 表示任意数量的任意字符; - ...

    用正则表达式提取SQL

    标题“用正则表达式提取SQL”涉及到的是在编程中如何使用正则表达式来从文本或代码中抓取SQL语句的相关知识。在IT领域,正则表达式(Regular Expression)是一种强大的文本处理工具,它能快速地匹配、查找、替换或者...

    sql_server 正则表达式

    ### SQL Server 2005 正则表达式的深度解析 #### 引言:正则表达式的威力 正则表达式,在SQL Server 2005中作为一种强大的文本处理工具,极大地增强了数据库处理复杂文本数据的能力。传统的T-SQL虽然在处理数据...

    在sqlserver2008r2版本中实现正则表达式

    在SQL Server 2008 R2中,虽然标准版并不直接支持正则表达式,但可以通过一些扩展方法和第三方工具来实现正则表达式的功能。这篇文章将详细讲解如何在SQL Server 2008 R2中实现正则表达式处理。 首先,SQL Server ...

    SQL 语法分析,正则表达式解析C#文件;正则表达式实现的语法分析引擎

    在IT领域,SQL语法分析和正则表达式是两种非常重要的技术,它们在处理和解析文本数据时起着至关重要的作用。SQL(Structured Query Language)是用于管理关系数据库的标准语言,而正则表达式则是匹配和操作字符串的...

    RegExp正则表达式

    ### RegExp正则表达式 #### 一、正则表达式简介 正则表达式(Regular Expression,简称RegEx或RegExp)是一种强大的文本处理工具,它能够帮助开发者在文本中搜索、替换以及提取特定的字符串模式。正则表达式在多种...

    Oracle数据库正则表达式

    使用正则表达式可以编写简洁、强大的 SQL 语句,提高数据处理的效率和灵活性。熟练使用正则表达式可以帮助用户快速搜索、替换和验证数据,并提供高度的灵活性。 在 Oracle 数据库中,正则表达式的应用非常广泛,...

    SQL修改表语句和正则表达式

    本文将深入探讨SQL修改表语句以及正则表达式在数据处理中的应用。 **SQL修改表语句** SQL修改表语句允许我们动态地更新数据库中的表结构,以便适应业务需求的变化。以下是一些常见的SQL命令: 1. **添加列 (ALTER...

    Oracle正则表达式详解(用法+实例)

    这些函数的使用方式类似于传统的 SQL 函数 `LIKE`、`INSTR`、`SUBSTR` 和 `REPLACE`,但采用了 POSIX 正则表达式而不是旧式的通配符 `%` 和 `_`。 ##### 1. `REGEXP_LIKE` - **功能**: 类似于 `LIKE` 函数,用于...

    SQL 正则表达式及mybatis中使用正则表达式

    在SQL中,正则表达式常用于复杂的数据过滤和查询。MySQL支持使用`REGEXP`和`NOT REGEXP`(或者`RLIKE`和`NOT RLIKE`)操作符来进行正则表达式的模式匹配。 在SQL中,正则表达式有以下一些基本概念和特殊字符: 1. `...

    电话号码及日期时间提取(正则表达式 C)

    在IT领域,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找、替换等操作。在本项目中,“电话号码及日期时间提取(正则表达式 C)”是一个使用C语言编写的程序,它能够从文本中有效地识别...

    报表工具FineReport正则表达式定义规则

    ### 报表工具FineReport正则表达式定义规则 #### 一、正则表达式概述 正则表达式是一种强大的文本处理工具,在多种编程语言中都有应用,它可以帮助我们完成字符串搜索、替换等一系列复杂的文本处理任务。在报表...

    Java正则表达式构造SQL语句

    Java正则表达式构造SQL语句Java正则表达式构造SQL语句Java正则表达式构造SQL语句

    正则表达式在SQL Server 2000中的实现与应用.pdf

    在SQL Server 2000中,虽然标准的正则表达式支持并不内置,但开发者仍然可以通过一些方式来实现正则表达式的功能。这主要依赖于T-SQL的内置函数和一些用户定义的函数(UDF)来模拟正则表达式的行为。下面将详细介绍...

    完全自动的正则表达式编写工具

    PLSQL.jgcscs、PHPsolo.jgcscs、Ruby.jgcscs分别对应Oracle的PL/SQL、PHP和Ruby语言的正则表达式配置,确保在这些语言中使用的正则表达式能够准确无误地工作。 总的来说,这个“完全自动的正则表达式编写工具”是一...

    正则表达式经典实例.pdf

    标题和描述均提到了“正则表达式经典实例”,这暗示了文档可能包含了一系列与正则表达式相关的示例和应用场景。正则表达式(Regular Expression)是一种强大的文本处理工具,用于模式匹配、搜索和替换字符串中的特定...

    正则表达式从入门到精通

    虽然标准SQL不直接支持正则表达式,但许多数据库系统如MySQL、PostgreSQL、Oracle和SQL Server提供了扩展函数来实现正则表达式的功能,如MySQL的`REGEXP`或SQL Server的`PATINDEX`。 在毕业设计中,正则表达式是一...

Global site tag (gtag.js) - Google Analytics