转换记录中的文本行

时间:2014-01-08 16:43:06

标签: sql sql-server

我正在寻找一种方法,我可以在单独的记录中转换文本行。也许有人有想法?

我在表格中有以下记录:

1          blabla          Messe\nJahr\nLand

第三个字段是文本字段。内容是一个有三行的文本。

现在,我应该写一个select,它给我三个记录

1  Memo
2  Jahr
3  Land

2 个答案:

答案 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