2
我正在尋找一種方法,可以將文本行轉換爲單獨的記錄。也許有人有一個想法?在記錄中轉換文本行
我有一個表中有如下記載:
1 blabla Messe\nJahr\nLand
第三個字段是一個文本框。內容是一個三行文本。
現在,我應該寫一個選擇,這給了我作爲一個結果,三個記錄
1 Memo
2 Jahr
3 Land
我正在尋找一種方法,可以將文本行轉換爲單獨的記錄。也許有人有一個想法?在記錄中轉換文本行
我有一個表中有如下記載:
1 blabla Messe\nJahr\nLand
第三個字段是一個文本框。內容是一個三行文本。
現在,我應該寫一個選擇,這給了我作爲一個結果,三個記錄
1 Memo
2 Jahr
3 Land
我建議使用一個光標,然後用分離的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')
使用這個..
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
這是標準化表格,使得第三場不需要被解析的好機會。也檢查出類似性質的這個答案:http://stackoverflow.com/questions/13873701/convert-comma-separated-column-value-to-rows – zedfoxus