IT/SQL

SQL SPLIT - table return

lI헐헐Il 2011. 9. 23. 15:50

USE [DOOBMS_DB]
USE [DOOBMS_DB]
GO
/****** Object:  UserDefinedFunction [dbo].[FN_SPLIT]    Script Date: 09/23/2011 17:57:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FN_SPLIT]
(
    @StrValue CHAR(1000),   -- 분리할 문자열
    @SplitChar CHAR(1)         -- 구분할 문자
) 
RETURNS @SPLIT_TEMP TABLE ( VALUE VARCHAR(50) )
AS 
BEGIN   
    DECLARE @oPos INT, @nPos INT
    DECLARE @TmpVar CHAR(1000) -- 분리된 문자열 임시 저장변수

    SET @oPos = 1 -- 구분문자 검색을 시작할 위치
    SET @nPos = 1 -- 구분문자 위치
	
	IF(CHARINDEX(@SplitChar, @StrValue, 1 )= 0 AND @StrValue <> '')
	 BEGIN
		INSERT INTO @SPLIT_TEMP VALUES( RTRIM(@StrValue))
	 END
	ELSE
	 BEGIN
		WHILE (@nPos > 0)
		BEGIN 
			SET @nPos = CHARINDEX(@SplitChar, @StrValue, @oPos ) 
			IF @nPos = 0
				SET @TmpVar = RIGHT(RTRIM(@StrValue), LEN(@StrValue)- @oPos+ 1 );
			ELSE
				SET @TmpVar = SUBSTRING(RTRIM(@StrValue), @oPos, @nPos - @oPos)
			IF LEN(@TmpVar)>0
				INSERT INTO @SPLIT_TEMP VALUES( @TmpVar)
			SET @oPos = @nPos + 1 
		END 
     END
   RETURN 
END

--select * from fn_split('A;B;C;D;E;F;G;H;',';')

위처럼 함수를 작성해서 사용.