set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
/*********************************************************************************
함 수 명 : 입력값 구분자 제거후 테이블 반환
함수기능 :
입력변수 : 구분자, 값
리 턴 값 : TABLE
작 성 일 : 2008-11-19
작 성 자 :
실행예제 : -- select * from dbo.UFN_SAM_SplitParameter(',','2,3,4')
수 정 일 수정자 수정한 라인 번호 및 수정 사항
**********************************************************************************/
ALTER FUNCTION [dbo].[UFN_SAM_SplitParameter]
(
@Separator CHAR(1),
@List VARCHAR(MAX)
)
RETURNS @ReturnTable TABLE(Item VARCHAR(1000))
AS
BEGIN
DECLARE @vIndex INT;
DECLARE @vNewText VARCHAR(8000);
IF @List = null
RETURN;
SET @vIndex = CHARINDEX(@Separator, @List);
WHILE NOT(@vIndex = 0)
BEGIN
SET @vNewText = RTRIM(LTRIM(LEFT(@List, @vIndex - 1)));
SET @List = RIGHT(@List, LEN(@List) - @vIndex);
INSERT INTO @ReturnTable(Item) VALUES(@vNewText);
SET @vIndex = CHARINDEX(@Separator, @List);
END
INSERT INTO @ReturnTable(Item) VALUES(RTRIM(LTRIM(@List)));
RETURN;
END
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
/*==============================================================================
프로그램ID : [dbo].[ufn_Split]
업무명 :
프로그램명 :
프로그램설명 : 배열(@String)을넘겨받아구분자(@Separator)를기준으로테이블을생성한다.
최초작성일 : 2007-01-08
최초작성자 :
수정일 :
수정자 :
입력값 : 01. @String
02. @Separator
출력값 : 테이블
실행예제 : SELECT Pos, Element FROM [dbo].[UFN_SAM_Split]('a,b,c', ',') AS F;
변경이력 :
참고사항 :
=============================================================================*/
ALTER FUNCTION [dbo].[UFN_SAM_Split]
(
@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