본문 바로가기

Test Code/MSSQL

[MSSQL] Split varchar to table

여러개의 데이터를 처리할 때 데이터 개수 만큼 파라메터를 설정하여 처리하면 되지만 

데이터 수가 변경되는 경우에는 처리하기가 참 곤란합니다.

그래서 스트링으로 붙여서 보내주고 구분자로 파싱하여 처리합니다.


아래는 스트링으로 붙여서 보낸 데이터를 파싱하여 TABLE 형태로 변환해주는 함수입니다.





CREATE FUNCTION [dbo].[fn_SplitNumber]

(

@String VARCHAR(8000)

)

RETURNS @Array TABLE 

(

DataSeq INT IDENTITY(1,1),

Data FLOAT

)

AS

BEGIN

DECLARE

@Value FLOAT

, @Temp VARCHAR(100)

, @Length SMALLINT

, @CurrentIndex SMALLINT

, @NextIndex SMALLINT

SET @Length = LEN(@String)

SET @CurrentIndex = 1

SET @NextIndex = 1


WHILE @NextIndex > 0

BEGIN

SET @NextIndex = CHARINDEX(',', @String, @CurrentIndex)


IF @NextIndex = 0 

BEGIN

SET @Temp = SUBSTRING(@String, @CurrentIndex, (@Length - @CurrentIndex + 1))

END

ELSE

BEGIN

SET @Temp = SUBSTRING(@String, @CurrentIndex, (@NextIndex - @CurrentIndex))

SET @CurrentIndex = @NextIndex + 1

END

IF @Temp <> '' 

BEGIN

SET @Value = CONVERT(FLOAT, @Temp)

INSERT @Array VALUES(@Value)

END

END

RETURN 

END




SELECT * FROM dbo.fn_SplitNumber('33.2, 45.5, 23.6,43.1, 38.2')