SQL Server 2005 Найти все символы между ## ---- ## строки столбца - PullRequest
2 голосов
/ 10 июня 2011

У меня есть таблица Шаблон со следующими столбцами:

ID, [Текст]


Предположим, у меня есть две записи в таблице шаблонов,

1, 'Его полное имя ## Full_Name ##, он родился ## Date_of_Birth ## в городе ## Place_of_Birth ##'

2, «Я ## First_Name ##, я родился ## Date_of_Birth ## '


Я хочу найти ## Full_Name ##, ## Date_of_Birth ## и ## Place_of_Birth ## в строке.

В другой строке может быть два результата совпадения: ## First_Name ## и ## Date_of_Birth ##.

Вывод двух записей будет таким:

1, полное имя, дата рождения, место рождения

2, First_Name, Date_of_Birth


Кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 10 июня 2011

Вот оно:

DECLARE @Text NVARCHAR(MAX)
SET @Text ='His full name is ##Full_Name##,he was born on ##Date_of_Birth## in city of ##Place_of_Birth##'

DECLARE @Delimiter VARCHAR(1000)
SET @Delimiter = '##';

WITH 
    numbers(number)
      AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY o.object_id, o2.object_id ) Number
           FROM     sys.objects o
                    CROSS JOIN sys.objects o2
         ) ,
    counts ( began, number )
      AS ( SELECT   CHARINDEX(@Delimiter, @TExt, 0)
                  , 1
           UNION ALL
           SELECT   CHARINDEX(@Delimiter, @TExt, began + 1)
                  , number + 1
           FROM     counts
           WHERE    CHARINDEX(@Delimiter, @TExt, began + 1) > 0
         ) ,
    subs ( began, ends, number )
      AS ( SELECT   C.began + LEN(@delimiter)
                  , c2.began
                  , c.number
           FROM     counts C
                    INNER JOIN counts C2 ON c2.number = c.number + 1
           WHERE    C.number % 2 = 1
         )
SELECT  SUBSTRING(@TExt, began, ( ends - began )) Word
FROM    subs
0 голосов
/ 10 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...