Я ищу способ конвертировать строки текста в отдельные записи. Может, есть у кого-то идея?

У меня в таблице есть следующая запись:

1          blabla          Messe\nJahr\nLand

Третье поле - текстовое. Контент представляет собой текст из трех строк.

Теперь я должен написать select, который дает мне в результате три записи

1  Memo
2  Jahr
3  Land
2
BennoDual 8 Янв 2014 в 20:43

2 ответа

Лучший ответ

Я предлагаю использовать курсор, а затем разделить строку с помощью 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
Brett Schneider 8 Янв 2014 в 16:59

Использовать этот..

  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
0
Sunny 8 Янв 2014 в 16:49