본문 바로가기
DataBase/MS-SQL

주어진 문자열을 구분자 기준으로 테이블로 반환하는 함수

by 언덕너머에 2014. 5. 20.

다음 함수는 문자열을 넘겨받아 해당 문자열을 구분자를 기준으로 테이블로 반환하는 예제이다.

 

CREATE FUNCTION [dbo].[ufn_SplitTable]
(
   @String  VARCHAR(MAX),
   @Separator CHAR(1) = ','
)
RETURNS @SplitTable TABLE
(
  Pos   INT,
  Element  VARCHAR(1000)
)
AS
BEGIN
  DECLARE @Num INT;
  SELECT @Num = 1;
  DECLARE @NUMS TABLE(n INT NOT NULL);

 

  WHILE @Num < LEN(@String) + 1
  BEGIN
    INSERT INTO @NUMS(n) VALUES(@Num)
    SET @Num = @Num + 1
  END;

 

  INSERT INTO @SplitTable
  SELECT n - LEN(REPLACE(LEFT(s, n), @Separator, '')) + 1 as pos,
               SUBSTRING(s, n, CHARINDEX(@Separator, s + @Separator, n) - n) as element
    FROM (SELECT @String as s) as A
    INNER JOIN @NUMS
        ON n <= LEN(s)
      AND SUBSTRING(@Separator + s, n, 1) = @Separator;

 

   RETURN;
END

 

실행예제

  SELECT Pos, Element FROM [dbo].[ufn_SplitTable]('a,b,c', ',') AS F;

 

결과

  Pos   Element

  1       a
  2       b
  3       c

 

'DataBase > MS-SQL' 카테고리의 다른 글

MS-SQL DB Spec 생성하는 프로시져  (0) 2015.02.21
LPad 기능구현  (0) 2014.05.21