2014-01-08 1 views
2

나는 별도의 레코드에서 텍스트 줄을 변환 할 수있는 방법을 찾고 있습니다. 아마도 아이디어가있는 사람이있을 것입니다.레코드의 텍스트 줄 변환

나는 테이블에 다음과 같은 기록을 가지고 :

1   blabla   Messe\nJahr\nLand 

세 번째 필드는 텍스트 필드입니다. 내용은 세 줄의 텍스트입니다.

지금은 세 개의 레코드

1 Memo 
2 Jahr 
3 Land 
+1

사용이 제 3 필드를 구문 분석 할 필요가 없도록 테이블을 정상화 할 수있는 좋은 기회입니다 테스트. 비슷한 성격의이 답변을 확인하십시오. http://stackoverflow.com/questions/13873701/convert-comma-separated-column-value-torows – 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