기능설명
comma (,), semi colon(;) 등으로 구분된 문장을
Row 단위로 분리해서 처리하고자 할 때 사용할 수 있는 Query입니다.
(spilit 함수와 유사한 기능을 가지고 있지요.)
여기서 예로 든 것은 SP로 되어 있지만,
때에 따라서 Function으로 만들어 사용해도 효과적일 것입니다.
Script 내의 다음 구문이 Row 단위로
분리된 data를 처리하는 부분입니다.
print substring(@list, @sp, @ep-1)
이것을 table에 넣는 logic으로 바꿀 수도 있고,
또는 결과물을 union으로 묶어서 RecordSet 형태로
떨어트릴 수 도 있을 것입니다.
Parameters 설명
1. @list varchar(100)
split하기를 원하는 문장 입력
함수를 사용한다면 컬럼이 될 수 도 있다.
2. @delimiter varchar(10)
split할 때 기준으로 삼을 구분자
예: , ; |
Script
/*
작성자 : 한기환
작성일 : 2005-02-22
내 용 : 특정 구분자를 가지는 문자열을 Row단위로 분리해서 반환한다.
사용예 :
EXEC dbo.usp_SplitByDelimiter @list= '한기환,정원혁,하성희', @delimiter = ','
*/
CREATE PROCEDURE dbo.usp_SplitByDelimiter
@list varchar(100)
, @delimiter varchar(10)
AS
set nocount on
declare
--@list varchar(100), @i int
-- , @delimiter varchar(10) -- delimitor
@len int -- Length of a sentence
, @ep int -- End Point
, @sp int -- Start Point
--set @delimiter = ','
--set @list= '한기환,정원혁,하성희'
set @len = len(@list)
set @sp = 1
set @ep = 1
-- Data의 마지막을 확인하기 위해서
-- End point는 항상 0보다 커야하고, Start Point는 전체 길이보다 작거나 같아야 한다.
while (@ep > 0 and @sp <= @len)
begin
set @ep =
case
when (charindex(@delimiter, substring(@list, @sp, @len)) = 0)
then @len + 1
else
charindex(@delimiter, substring(@list, @sp, @len))
end
-- print cast(@list as varchar) +':'+cast(@sp as varchar) +':'+ cast(@ep as varchar)
print substring(@list, @sp, @ep-1)
set @sp = @sp + @ep
end
set nocount off
GO
[출처] T-SQL로 구현한 split 함수|작성자 필립박
'데이터베이스 > SQL Server' 카테고리의 다른 글
숫자를 문자로 나타내는 함수(숫자=>한글) (0) | 2008.04.29 |
---|---|
숫자를 문자로 나타내는 함수(숫자=>영문) (0) | 2008.04.29 |
서버 측 동적 쿼리에서의 탈출 (0) | 2008.04.29 |
동적 SQL의 축복과 저주 (0) | 2008.04.29 |
[팁]sa패스워드를 까먹었을때 복구하는 방법 (0) | 2008.04.29 |