SQL Ser 2008을 사용하고 있으며 데이터 열이 하나 뿐인 큰 테이블이 있습니다. 데이터는 일관성이 거의없는 임의의 문자열입니다. 샘플 : 이름 계정 445566 0010020056893010445478008 AFD 369. 나는 stackoverflow 사용자가 제안한 분할 함수로 작업 해왔다. 그것은 잘 작동하지만 함수는 split 문자열을 하나의 열에 할당합니다. 개별 열이 필요합니다. 현재 결과는 이름, 계정, 445566 등의 값을 가진 1col입니다. 그러나 찾고있는 결과는 col1 Name, col2 Account, col3 445566, ... 누군가가 맞춤법에 대한 통찰력을 제공 할 수 있다면 이 스크립트 또는 원하는 결과를 얻을 수있는 사용법은 많이 감사하겠습니다.SQL Server 2008 T-SQL UDF 스플릿() 맞춤 조정
CREATE FUNCTION [dbo].[Split]
(
@String varchar(max)
,@Delimiter char
)
RETURNS @Results table
(
Ordinal int
,StringValue varchar(max)
)
as
begin
set @String = isnull(@String,'')
set @Delimiter = isnull(@Delimiter,'')
declare
@TempString varchar(max) = @String
,@Ordinal int = 0
,@CharIndex int = 0
set @CharIndex = charindex(@Delimiter, @TempString)
while @CharIndex != 0 begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,substring(@TempString, 0, @CharIndex)
)
set @TempString = substring(@TempString, @CharIndex + 1, len(@TempString) - @CharIndex)
set @CharIndex = charindex(@Delimiter, @TempString)
end
if @TempString != '' begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,@TempString
)
end
return
end
--The usage:
SELECT
*
FROM
mytable M
CROSS APPLY
[dbo].[Split] (M.TheColumn, ' ') S
Where rtrim(s.StringValue) != ''
Incidently,이 기능은 @antisanity에서 차용하고 테이블에의 사용이 @gbn에서왔다. 고마워! – 2boolORNOT2bool
달성하려는 목표는 무엇입니까? 이 데이터가 유지 관리되고 있습니까 아니면 가져 오기입니까? 출력 테이블의 너비가 달라 지거나 정적일까요? – canon
저는 이전 플랫 파일 배치를 리버스 엔지니어링합니다. 데이터는 120자를 포함하는 문자열로 구성됩니다. 테이블 너비는 정적 열 수입니다. 내 목표는 모든 데이터가 포함 된 하나의 열뿐만 아니라 9 또는 10 개의 열을 포함하는 열의 행으로 문자열을 나눕니다. 이것은 한 번에 10000 행의 데이터에 영향을 미칩니다. 어떤 도움을 주셔서 다시 고맙습니다! – 2boolORNOT2bool