CREATE FUNCTION fSplit( @String NVARCHAR(MAX), @Separator NVARCHAR(1))
RETURNS @Rtn Table ( Num INT, Val NVARCHAR(MAX) )
AS BEGIN
DECLARE @Start INT = 1, @Idx INT = 1, @Num INT = 0, @Tmp NVARCHAR(MAX)
WHILE(@Idx > 0) BEGIN
SET @Idx = CHARINDEX(@Separator, @String, @Start)
IF @Idx = 0 BEGIN
SET @Tmp = RIGHT(@String, LEN(@String) - @Start + 1)
END ELSE BEGIN
SET @Tmp = SUBSTRING(@String, @Start, @Idx - @Start)
END
IF LEN(@Tmp) > 0 BEGIN
INSERT INTO @Rtn
VALUES ( @Num, @Tmp )
END
SET @Start = @Idx + 1
SET @Num = @Num + 1
END
RETURN
END
GO
-결과 테스트
SELECT * FROM fSplit('2-1-3', '-')
@String에 문자열을 받아서 @Separator의 구분자에 의해 구분되어 임시테이블로 반환됩니다.
n번째 데이터가 필요할 때에는 n번째 row의 데이터를 빼오면 되겠습니다.
몇번째 데이터를 꺼내올지는 함수를 간단히 만들어서 사용하셔도 됩니다.
처리속도는 장담못하지만... 아마 split 기능을 수행하는 쿼리중에는 코드가 가장 짧을것으로 생각됩니다.
아참.... mssql에서는 c#에서 ///와 같은 기능하는 명령어가 혹시 있나요?
감사합니다^^ 도움 많이 됐어요!