2014-12-12 1 views
1

Мне нужно запросить некоторую информацию на основе соответствия регулярных выражений. Но, помимо фильтрации информации с помощью регулярного выражения, я также хочу показать согласованный контент как новое поле.Возвращение регулярного выражения из отфильтрованного SQL-запроса как поля

Пример:

DECLARE @example TABLE (field VARCHAR(100)) 

INSERT INTO @example VALUES (' generic info A #123# ') 
INSERT INTO @example VALUES (' chewbacca #778# info B ') 
INSERT INTO @example VALUES (' do not retrieve ') 
INSERT INTO @example VALUES (' #456# balbalba ') 

SELECT * FROM @example WHERE field LIKE '%[0-9][0-9][0-9]%' 

Мой запрос возвращает:

|field 
|----------------------------- 
| generic info A #123# 
| chewbacca #778# info B 
| #456# balbalba 

И я хотел бы знать, если есть способ получить совпадающую информацию в другой области, как в этом примере:

|match |field 
|------|----------------------------- 
|#123# | generic info A #123# 
|#778# | chewbacca #778# info B 
|#456# | #456# balbalba 

Большое спасибо!

ответ

1

Ответ использует подстроки и функции PATINDEX как так (другими словами, используйте функцию PATINDEX, чтобы получить первую позицию в mathced строку, а затем «вырезать» Символы, необходимые, используя подстроку):

DECLARE @example TABLE (field VARCHAR(100)) 

INSERT INTO @example VALUES (' generic info A #123# ') 
INSERT INTO @example VALUES (' chewbacca #778# info B ') 
INSERT INTO @example VALUES (' do not retrieve ') 
INSERT INTO @example VALUES (' #456# balbalba ') 

SELECT e.field, SUBSTRING(E.field, patindex('%[0-9][0-9][0-9]%', e.field)-1, 5) as match 
FROM @example e 
WHERE e.field LIKE '%[0-9][0-9][0-9]%' 
+0

Спасибо большое! Это сработало. Я надеялся, что какое-то регулярное выражение, похожее на C#, будет доступно. Но самое главное здесь - это работать = -) Если бы мое регулярное выражение вернуло строку с переменным размером, этот результат все же был бы достигнут? –

Смежные вопросы