[MSSQL] CHARINDEX를 이용한 문자열 SPLIT
2013. 12. 3. 21:01ㆍCoders
CHARINDEX 함수를 이용하여, 문자열을 쪼개어 테이블에 넣어 리턴하는 테이블리턴함수 입니다.
여러 번 작성했었는데, 간만에 그냥 테스트 해 보며 머릿속에서 나오는 대로 코딩해 보았습니다.
넘겨지는 원문은 긴 데이터도 받아들일 수 있도록 NTEXT를 받을 수 있게 구현 되어 있습니다.
해당 테이블 리턴 함수를 이용하여 alias를 주고, 다른 테이블과 JOIN 하며 처리하면 활용도가 높겠죠. ㅎ
NTEXT 데이터 타입도,
SUBSTRING 과 CHARINDEX 라는 훌륭한 문자열 함수를 적용시킬 수 있다는 좋은 예제라고 생각 됩니다.
CREATE FUNCTION TF_SPLIT ( @ORG_STR NTEXT, -- 쪼갤 원문 @SPLITTER NVARCHAR(1) -- 쪼갤 문자열 ) RETURNS @TBL_SPLIT TABLE ( VAL NVARCHAR(4000) -- 쪼갠 데이터가 들어갈 테이블(길이 확인) ) AS BEGIN -- 원문이 빈 문자열이면 그대로 리턴 IF ISNULL(DATALENGTH(@ORG_STR), 0) = 0 GOTO FUNC_RET; -- 변수 선언 DECLARE @START INT, @FOUND INT; -- 변수 초기화 SET @START = 1; SET @FOUND = CHARINDEX(@SPLITTER, @ORG_STR, @START + 1); -- @SPLITTER 가 존재하는 경우에만 LOOP WHILE @FOUND > @START BEGIN -- @SPLITTER 로 쪼갠 문자열을 리턴 테이블에 INSERT INSERT INTO @TBL_SPLIT ( VAL ) VALUES ( SUBSTRING(@ORG_STR, @START, @FOUND - @START) ); -- 다음 @SPLITTER 찾음 SET @START = @FOUND + 1; SET @FOUND = CHARINDEX(@SPLITTER, @ORG_STR, @START); END; FUNC_RET: RETURN; END GO -- 테스트 SELECT * FROM TF_SPLIT ( N'김구라&윤종신&김국진&규현&', N'&' ); GO
결과
'Coders' 카테고리의 다른 글
[C#] Splash Window 띄우기 (0) | 2013.12.27 |
---|---|
[C++] Linked List 예제 (0) | 2013.11.20 |
[C#] Get 방식으로 웹 페이지 읽기. (0) | 2013.11.19 |