我正在寻找一种方法,我可以在单独的记录中转换文本行。也许有人有想法?
我在表格中有以下记录:
1 blabla Messe\nJahr\nLand
第三个字段是文本字段。内容是一个有三行的文本。
现在,我应该写一个select,它给我三个记录
1 Memo
2 Jahr
3 Land
答案 0 :(得分: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')
答案 1 :(得分: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