문자열: 'AB^CDE^FGH^^IJK'


SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 1);

결과: AB


SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 2);

결과: CDE


SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 3);

결과: FGH


SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 4);

결과: 공백


SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 5);

결과: IJK



-- 함수 FN_SPLIT 생성

CREATE FUNCTION [dbo].[FN_SPLIT]

(

 @STRING VARCHAR(MAX )     -- 문자열

,@DELI VARCHAR (10)            -- 구분자

,@POSITION INT                   -- 위치

)

RETURNS VARCHAR (200)

AS

BEGIN

 DECLARE

  @START SMALLINT

 ,@END SMALLINT

 ,@COUNTER SMALLINT

 ,@DELISIZE SMALLINT

 ,@RET VARCHAR(200 )


 SELECT @DELISIZE = LEN (@DELI)

 

 IF RIGHT(@STRING, @DELISIZE )!=@DELI

 BEGIN

  SET @STRING =@STRING+ @DELI

 END

 SET @STRING =@DELI+ @STRING

 

 SET @START = 1

 SELECT @END = CHARINDEX (@DELI ,@STRING , @START+@DELISIZE )

 SET @COUNTER = 0

 WHILE ( 1=1 )

 BEGIN

  SET @START = CHARINDEX (@DELI ,@STRING )

  SELECT @END = CHARINDEX (@DELI ,@STRING , @START+@DELISIZE )

        IF @END <= 0 BREAK

  SET @RET = SUBSTRING(@STRING ,@START+ @DELISIZE ,@END-@START -@DELISIZE)

  SELECT @STRING = STUFF (@STRING, @START,@DELISIZE ,'')

  SET @COUNTER = @COUNTER + 1

  IF( @COUNTER = @POSITION )

        BREAK;

 END

 RETURN @RET

END



+ Recent posts