구분자로 분리된 값을 여러레코드로 반환
일반적인 SQL 내장 함수로는 처리가 불가능 하지만
MSSQL 2005 부터는
아래와 같은 사용자정의함수를 통해 결과를 얻을 수 있습니다
USE TEMPDB
GO
CREATE TABLE TEST(A INT, B VARCHAR(10))
GO
INSERT TEST VALUES(1,'1')
INSERT TEST VALUES(1,'1,2')
INSERT TEST VALUES(1,'1,2,3')
INSERT TEST VALUES(1,'1,2,3,4')
GO
CREATE FUNCTION DBO.UFN_SPLIT
(
@TEXT VARCHAR(1000)
,@COMMA CHAR(1)
)
RETURNS @T TABLE ( NUM INT)
AS
BEGIN
DECLARE @NUM INT
IF @TEXT IS NULL OR @TEXT = ''
RETURN
IF CHARINDEX(@COMMA,@TEXT) = 0
INSERT @T VALUES(CONVERT(INT,@TEXT))
ELSE
BEGIN
SET @NUM = 0
WHILE CHARINDEX(@COMMA,@TEXT) >= 0
BEGIN
IF CHARINDEX(@COMMA,@TEXT) = 0
BEGIN
INSERT @T VALUES(CONVERT(INT,@TEXT))
RETURN
END
ELSE
BEGIN
SET @NUM = CONVERT(INT, SUBSTRING(@TEXT,1,CHARINDEX(@COMMA,@TEXT)-1))
INSERT @T VALUES (@NUM)
SET @TEXT = SUBSTRING(@TEXT
,CHARINDEX(@COMMA,@TEXT)+1
,LEN(@TEXT)-CHARINDEX(@COMMA,@TEXT))
END
END
END
RETURN
END
GO
SELECT TEST.A, B.NUM FROM TEST
CROSS APPLY DBO.UFN_SPLIT(TEST.B,',') B