Получить значение T-SQL с помощью регулярных выражений - PullRequest
0 голосов
/ 01 сентября 2010

У меня есть следующая строка в базе данных:

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

Кроме того, @Value может также иметь 'RE:' в начале строки, например:

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

Как я могу получить доступ к 4888378977CA4A5 части строки, используя регулярные выражения?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 01 сентября 2010

T-SQL не имеет встроенной поддержки регулярных выражений. Вы можете использовать функцию CLR для доступа к функциональности регулярных выражений .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 голос
/ 01 сентября 2010

Это - это способ сделать это в SQL Server 2000 с помощью VBScript.RegExp.

Однако в SQL Server 2005 и SQL Server 2008 было бы лучше использовать символ.NET Regex Library, как показано здесь .

0 голосов
/ 01 сентября 2010

Регулярное выражение будет \[([A-Z0-9]+)\]. Извлечение подстроки в захваченной группе зависит от вашего вкуса регулярного выражения. Это может быть $1, \1, match.groups(1) и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...