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
'Database > MS-SQL' 카테고리의 다른 글
텍스트 자르기 patindex (0) | 2012.04.24 |
---|---|
SQL서버 시스템 통계 함수 (0) | 2012.04.24 |
Select top 10 단축키 만들기 (sp_sys_table_top_10) (0) | 2012.04.24 |
문자열 함수 정리 (0) | 2012.04.24 |
구분된 문자를 배열로 만들기 (0) | 2012.04.24 |