다음 함수는 문자열을 넘겨받아 해당 문자열을 구분자를 기준으로 테이블로 반환하는 예제이다.
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 |