ALTER FUNCTION [dbo].[FN_SPLIT]
(
@StrValue VARCHAR(MAX), -- 분리할 문자열
@SplitChar VARCHAR(1) -- 구분할 문자
)
RETURNS @SPLIT_TEMP TABLE ( VALUE VARCHAR(50) )
AS
BEGIN
DECLARE @oPos INT, @nPos INT
DECLARE @TmpVar VARCHAR(1000) -- 분리된 문자열 임시 저장변수
SET @oPos = 1 -- 구분문자 검색을 시작할 위치
SET @nPos = 1 -- 구분문자 위치
WHILE (@nPos > 0)
BEGIN
SET @nPos = CHARINDEX(@SplitChar, @StrValue, @oPos )
IF @nPos = 0
SET @TmpVar = RIGHT(@StrValue, LEN(@StrValue)-@oPos+1 )
ELSE
SET @TmpVar = SUBSTRING(@StrValue, @oPos, @nPos-@oPos)
IF LEN(@TmpVar)>0
INSERT INTO @SPLIT_TEMP VALUES( @TmpVar )
SET @oPos = @nPos +1
END
RETURN
END
위 함수의 사용법
select * from (
select a.*, b.col1 from table1 a, table2 b
where a.tempcol = b.tempcol
) a
inner join dbo.FN_SPLIT('101,102', ',') b on a.col1 = b.VALUE
inner join dbo.FN_SPLIT('1,2',',') c on a.col2 = c.VALUE
inner join dbo.FN_SPLIT('A,B', ',') d on a.col3 like '' + d.VALUE + '%'
또는
함수 등록하고 사용법은 아래와 같이 하면 된다.
select * from (
select a.*, b.tempcol from table1 a, table2 b
where a.col1 = b.col1
) a
inner join dbo.FN_ParamToList('101,102') b on a.col1= b.id
inner join dbo.FN_ParamToList('1,2') c on a.col2 = c.id
inner join dbo.FN_ParamToList('A,B') d on a.col3 like '' + d.id + '%'
'프로그래밍 > DBMS' 카테고리의 다른 글
MSSQL 테이블 변경 시, "변경 내용을 저장할 수 없습니다.." 나올 때 (0) | 2014.03.12 |
---|---|
MSSQL, 테이블 사용중인 프로시져 알아내기 (0) | 2013.12.18 |
MSSQL 플랜캐시 확인 쿼리 (2) | 2013.09.25 |
64bit MSSQL 2008 R2 에서 32bit Oracle DB 링크 걸기 (1) | 2013.08.29 |
오라클 DECODE, GREATEST 로 음수값 처리하기 (0) | 2013.04.10 |
MSSQL 0으로 나누기 오류 처리하기 (0) | 2013.04.09 |
MSSQL, 줄리안데이트 <-> DATETIME 바꾸는 함수 (2) | 2012.01.02 |
MSSQL, 줄리안 데이트로 바꾸기 (0) | 2012.01.02 |