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
Posted by 김준홍 (http://www.Juuun.com)