구분자로 분리된 값을 여러레코드로 반환
일반적인 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
'프로그래밍 > MS-SQL' 카테고리의 다른 글
sql 인젝션 (0) | 2013.03.15 |
---|---|
SQL2005 HASH함수 MD5 (0) | 2013.03.15 |
sp_change_users_login (0) | 2009.06.19 |
SQL Injection 기법 정리 #2 (0) | 2007.11.22 |
프로필러 설정 (0) | 2007.11.22 |