代码之家  ›  专栏  ›  技术社区  ›  Curtis stepd

使用正则表达式获取T-SQL值

  •  0
  • Curtis stepd  · 技术社区  · 14 年前

    我在数据库中有以下字符串:

    SET @Value = "[4888378977CA4A5] Test String"
    

    此外, @Value 字符串开头也可以有“re:”,例如:

    SET @Value = "RE: [4888378977CA4A5] Test String"
    

    我怎样才能进入 4888378977CA4A5 使用正则表达式的字符串的一部分?

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  3
  •   Martin Smith    14 年前

    T-SQL不支持本机regex。你可以使用 a CLR function 访问.NET Regex功能或使用 PatIndex 如果模式简单。

    或者如果你只想得到 [...] 也许吧 CharIndex 会起作用。

    ;with strings as
    (
    SELECT 'no match' AS string UNION ALL
    SELECT '[4888378977CA4A5] Test String' UNION ALL
    SELECT 'RE: [Other Value] Test String' 
    )
    select substring(string,
                 charindex('[',string)+1,
                 charindex(']',string, charindex('[',string))-charindex('[',string)-1)
                                                                              AS result
    from strings
    where string like '%/[%/]%' ESCAPE '/'
    

    退换商品

    result
    -----------------------------
    4888378977CA4A5
    Other Value
    
        2
  •  1
  •   Justin Dearing    14 年前

    This 是在SQL Server 2000中使用vbscript.regexp执行此操作的一种方法。

    但是,在SQL Server 2005和SQL Server 2008中,最好使用.NET regex库,如中所示。 here .

        3
  •  0
  •   Amarghosh    14 年前

    正则表达式将是 \[([A-Z0-9]+)\] . 提取捕获组中的子字符串取决于您的regex风格。它可能是 $1 , \1 , match.groups(1) 等。