여러 아이디 값이나 변수를 배열처럼 넘겨서 사용하고 싶을 때가 간혹 있다. 뭐 이런 형태로 변수를 넘겨서 받아 사용하고 싶을 때 유용한 함수이다. (ex. 100,90,88,105,300,412,938,... )
CREATE FUNCTION [dbo].[UF_TEXT_SPLIT] ( @TEXT VARCHAR(8000) ,@DELIMITER CHAR(1) ) RETURNS @STRINGS TABLE ( POSITION INT IDENTITY(1,1) PRIMARY KEY, VALUE NVARCHAR(MAX) ) AS BEGIN
DECLARE @INDEX INT
SET @INDEX = -1
WHILE (LEN(@text) > 0) BEGIN SET @INDEX = CHARINDEX(@DELIMITER , @TEXT)
IF (@INDEX = 0) AND (LEN(@TEXT) > 0) BEGIN INSERT INTO @STRINGS VALUES (@TEXT) BREAK END
IF (@INDEX > 1) BEGIN INSERT INTO @STRINGS VALUES (LEFT(@TEXT, @INDEX - 1)) SET @TEXT = RIGHT(@TEXT, (LEN(@TEXT) - @INDEX)) END ELSE SET @TEXT = RIGHT(@TEXT, (LEN(@TEXT) - @INDEX)) END
RETURN END
|
이렇게 만든 후에 샘플로 돌려보자.
SELECT * FROM UF_TEXT_SPLIT('100,90,88,105,300,412,938', ',') GO
SELECT * FROM UF_TEXT_SPLIT('강동원@지상렬@차인표@고승덕', '@') GO |
그 결과는?
'SQL > 도움말 팁들!' 카테고리의 다른 글
[MSSQL] 0으로나누기오류가발생했습니다. (0) | 2012.07.11 |
---|---|
MSDN 링크 도움말 (0) | 2012.07.06 |
[MSSQL] SQL SERVER 2005 사용자 추가 및 계정 권한 컨트롤 (0) | 2012.07.06 |
[MSSQL] 특정 컬럼명을 포함하는 테이블 목록보기 (0) | 2012.07.03 |
FK 설정시 충돌이 발생했다? 무슨 이야기지? (0) | 2012.06.28 |