본문 바로가기

DataBase/MSSQL

[MSSQL]구분문자열로 Split처리 함수

MSSQL에서 특정문자열을 기준으로 데이터를 나눌때 사용하는 함수입니다.

 

1.문자열을 구분자로 분리하여 테이블로 반환하는 함수

CREATE FUNCTION [dbo].[FN_GET_Split] 
(
    @StrValue VARCHAR(1000),   -- 분리할 문자열
    @SplitChar VARCHAR(1)      -- 구분할 문자
)
RETURNS @SPLIT_TEMP TABLE  ( VALUE VARCHAR(50) )
AS
BEGIN

 		DECLARE @oPos INT, @nPos INT
 		DECLARE @TmpVar VARCHAR(1000) -- 분리된 문자열 임시 저장변수
    SET @oPos = 1 -- 구분문자 검색을 시작할 위치
    SET @nPos = 1 -- 구분문자 위치

    WHILE (@nPos > 0)
    BEGIN
        SET @nPos = CHARINDEX(@SplitChar, @StrValue, @oPos )
        IF @nPos = 0 
            SET @TmpVar = RIGHT(@StrValue, LEN(@StrValue)-@oPos+1 )
        ELSE
            SET @TmpVar = SUBSTRING(@StrValue, @oPos, @nPos-@oPos)
        IF LEN(@TmpVar)>0
            INSERT INTO @SPLIT_TEMP VALUES( @TmpVar )
        SET @oPos = @nPos +1 
    END
   RETURN 
END

 

FN_GET_Split 실행결과

 

 

2. 문자열을 구분자로 분리하여 특정 Index값만 조회할수있는 함수

CREATE FUNCTION [dbo].[FN_Get_Split_Index]
(
 	@StrValue  VARCHAR(500),  -- 대상 문자열
 	@SplitChar   CHAR(1),     -- 구분기호
 	@idx  INT                 -- 배열 인덱스
)
RETURNS NVARCHAR(100)
AS
BEGIN
	DECLARE @word    CHAR(20),    -- 반환할 문자
		 		@sTextData  VARCHAR(600), 
		 		@num    SMALLINT;
 	SET @num = 1;
 	SET @sTextData = LTRIM(RTRIM(@StrValue)) + @SplitChar; 
	WHILE @idx >= @num
	BEGIN
  		IF CHARINDEX(@SplitChar, @sTextData) > 0
  		BEGIN
			-- 문자열의 인덱스 위치의 요소를 반환
			SET @word = SUBSTRING(@sTextData, 1, CHARINDEX(@SplitChar, @sTextData) - 1);
      SET @word = LTRIM(RTRIM(@word));
   		-- 반환된 문자는 버린후 좌우공백 제거   
			SET @sTextData = LTRIM(RTRIM(RIGHT(@sTextData, LEN(@sTextData) - (LEN(@word) + 1))))
  		END 
  		ELSE BEGIN
			SET @word = NULL;
  		END
  	SET @num = @num + 1
 	END
 	RETURN(@word);
END

 

FN_GET_Split_Index 실행결과