나는 별도의 레코드에서 텍스트 줄을 변환 할 수있는 방법을 찾고 있습니다. 아마도 아이디어가있는 사람이있을 것입니다.레코드의 텍스트 줄 변환
나는 테이블에 다음과 같은 기록을 가지고 :
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
사용이 제 3 필드를 구문 분석 할 필요가 없도록 테이블을 정상화 할 수있는 좋은 기회입니다 테스트. 비슷한 성격의이 답변을 확인하십시오. http://stackoverflow.com/questions/13873701/convert-comma-separated-column-value-torows – zedfoxus