Notice
Recent Posts
Recent Comments
관리 메뉴

안까먹을라고 쓰는 블로그

[MSSQL] SPLIT 구현 본문

DataBase/MS SQL

[MSSQL] SPLIT 구현

YawnsDuzin 2022. 5. 5. 20:11

 

반응형


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

-- SELECT * FROM[FN_GET_Split] ('A|B|C|D|E|F|G|', '|')
-- SELECT COUNT(*) FROM[FN_GET_Split] ('A|B|C|D|E|F|G|', '|')
ALTER 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
GO

결과값




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

-- SELECT [dbo].[FN_Get_Split_Index] ('A|B|C|D|E|F|G|', '|', 2)
ALTER 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


결과값



끝~



[출처] https://tjddnjs625.tistory.com/14

반응형
Comments