2011-06-10 30 views
2

我有一個表模板具有以下列:SQL Server 2005中找到的所有字符之間## ---- ##列排

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,FULL_NAME,DATE_OF_BIRTH,Place_of_Birth

2的FIRST_NAME,DATE_OF_BIRTH


誰能幫助我?

+0

什麼應該輸出什麼樣子嗎? – gbn 2011-06-10 07:29:52

+0

良好的格式是你的朋友。 – 2011-06-10 07:30:44

+0

輸出中通常會有多少列?從您的描述中不太清楚。 – 2011-06-10 12:15:40

回答

2

這就是:

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

上面的代碼不起作用。我收到以下錯誤;無法將默認值分配給局部變量。 – 2011-06-10 12:55:07

+0

@Rais Hussain - 立即試用 – 2011-06-10 15:41:37

+0

@ Alex-Aza,@Delex謝謝你們倆。 – 2011-06-13 04:30:45