2014-01-08 74 views
2

我正在尋找一種方法,可以將文本行轉換爲單獨的記錄。也許有人有一個想法?在記錄中轉換文本行

我有一個表中有如下記載:

1   blabla   Messe\nJahr\nLand 

第三個字段是一個文本框。內容是一個三行文本。

現在,我應該寫一個選擇,這給了我作爲一個結果,三個記錄

1 Memo 
2 Jahr 
3 Land 
+1

這是標準化表格,使得第三場不需要被解析的好機會。也檢查出類似性質的這個答案:http://stackoverflow.com/questions/13873701/convert-comma-separated-column-value-to-rows – zedfoxus

回答

1

我建議使用一個光標,然後用分離的charpos串。因爲我不知道你的表或列的名稱,所以我使用了表名a,列名a。

declare c cursor for 
select a 
    from a 

declare @p varchar(max) 

open c 
fetch next from c into @p; 

while @@FETCH_STATUS = 0 
begin 
    while CHARINDEX('\n',@p,0) > 0 
    begin 
    select SUBSTRING(@p,0,charindex('\n',@p,0)) 
    set @p = SUBSTRING(@p,charindex('\n',@p,0)+2, LEN(@p)-charindex('\n',@p,0)-1); 
    end 
    select @p; 
    fetch next from c into @p; 
end 

DEALLOCATE c 

我測試了這個使用

create table a (a varchar(50)) 
insert into a values ('a\nb\nc') 
insert into a values ('d\ne\nf') 
0

使用這個..

ALTER FUNCTION [dbo].[GetWordsFromString] 
(
@string nvarchar(max) 
) 
RETURNS 
@out TABLE 
(
Name nvarchar(200) 
) 
AS 
BEGIN 
    DECLARE @pos  int, 
       @nextpos int, 
       @valuelen int 

SELECT @pos = 0, @nextpos = 1 

    WHILE @nextpos > 0 
    BEGIN 
     SELECT @nextpos = charindex('\', @string, @pos + 1) 
     SELECT @valuelen = CASE WHEN @nextpos > 0 
           THEN @nextpos 
           ELSE len(@string) + 1 
         END - @pos - 1 
     INSERT @out 
     VALUES (convert(nvarchar, substring(@string, @pos + 1, @valuelen))) 
     SELECT @pos = @nextpos 
    END 

    RETURN 
END