fn_Split_Get_Index 문자 자르기 split() 함수와 동일한 기능 구현
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
/*
비주얼 베이직의 split() 함수와 동일한 기능 구현
@sText : 자를 문자열 원본
@sDelim : 자르기 대상 문자열
@Index ; 리턴 문자열 순번
SELECT DBO.fn_Split_Get_Index('1/2/3/4/5/6/7/8/9/0/','/' , 1)
SELECT DBO.fn_Split_Get_Index('1/2/3/4/5/6/7/8/9/0/','/' , 3)
*/
CREATE FUNCTION [dbo].[fn_Split_Get_Index](@sText varchar(8000), @sDelim varchar(20) ='#' , @Index int = 0)
RETURNS VARCHAR(8000)
AS
BEGIN
/*
DECLARE @sText varchar(8000), @sDelim varchar(20) , @Index int
SET @sText = '1/2/3/4/5/6/7/8/9/0/'
SET @sDelim = '/'
SET @Index = 9
*/
if @Index <= 0 begin
return ''
end
DECLARE @value varchar(8000)
DECLARE @iStrike smallint
DECLARE @iDelimlength tinyint
set @value = ''
SET @iDelimlength = LEN(@sDelim)
SET @sText = LTrim(RTrim(@sText))
WHILE @Index > 0
BEGIN
SET @Index = @Index - 1
--텍스트에서 구분자를 발견하면, 첫 번째 요소를 반환하고
--반환되는 테이블에 인덱스를 입력한다.
IF CHARINDEX(@sDelim, @sText)>0
BEGIN
-- 첫 번째 요소를 반환
SET @value = SUBSTRING(@sText,1, CHARINDEX(@sDelim,@sText)-1)
SET @iStrike = LEN(@value) + @iDelimlength
SET @sText = LTrim(Right(@sText,LEN(@sText) - @iStrike))
END
ELSE
BEGIN
--만약 텍스트 안에서 구분자를 더 이상 찾을 수 없게 되면,
--@sText가 @retArray의 마지막 값이다.
if @Index = 0 begin
SET @value = @sText
end
else begin
SET @value = ''
end
SET @Index = 0
END
IF @Index = 0 BEGIN
RETURN @value
END
END
RETURN ''
END