[MSSQL] 문자열 자르는 함수
여러 아이디 값이나 변수를 배열처럼 넘겨서 사용하고 싶을 때가 간혹 있다. 뭐 이런 형태로 변수를 넘겨서 받아 사용하고 싶을 때 유용한 함수이다. (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 |
그 결과는?