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

时间:2010-09-01 14:46:12

标签: regex tsql sql-server-2008

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

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

此外,@Value也可能在字符串的开头有'RE:',例如:

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

如何使用正则表达式访问字符串的4888378977CA4A5部分?

谢谢!

3 个答案:

答案 0 :(得分:3)

T-SQL没有本机正则表达式支持。您可以使用a CLR function来访问.NET正则表达式功能,或者如果模式很简单,则使用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

答案 1 :(得分:1)

This是使用VBScript.RegExp在SQL Server 2000中执行此操作的方法。

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

答案 2 :(得分:0)

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