1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**********************************************************************
    개    요     : 입력된 문자열 기준으로 자르기     
    작성자 명 : HJH
    작성 일자 : 2016-11-03
    수정자 명 :
    수정 일자 :
    수정 사유 :  
    수정 내용 : 
************************************************************************/
--SELECT VALUE FROM FN_SPLIT('1;2;3;4;5',';')
CREATE FUNCTION [dbo].[FN_SPLIT]
(
    @StrValue VARCHAR(MAX),   -- 분리할 문자열
    @SplitChar VARCHAR(1)      -- 구분할 문자
RETURNS @SPLIT_TEMP TABLE  ( VALUE VARCHAR(50) )
AS 
BEGIN   
    DECLARE @oPos INT, @nPos INT
    DECLARE @TmpVar VARCHAR(MAX) -- 분리된 문자열 임시 저장변수
 
    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
cs