반응형
MSSQL에서 특정문자열을 기준으로 데이터를 나눌때 사용하는 함수입니다.
1.문자열을 구분자로 분리하여 테이블로 반환하는 함수
CREATE FUNCTION [dbo].[FN_GET_Split]
(
@StrValue VARCHAR(1000), -- 분리할 문자열
@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
2. 문자열을 구분자로 분리하여 특정 Index값만 조회할수있는 함수
CREATE FUNCTION [dbo].[FN_Get_Split_Index]
(
@StrValue VARCHAR(500), -- 대상 문자열
@SplitChar CHAR(1), -- 구분기호
@idx INT -- 배열 인덱스
)
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @word CHAR(20), -- 반환할 문자
@sTextData VARCHAR(600),
@num SMALLINT;
SET @num = 1;
SET @sTextData = LTRIM(RTRIM(@StrValue)) + @SplitChar;
WHILE @idx >= @num
BEGIN
IF CHARINDEX(@SplitChar, @sTextData) > 0
BEGIN
-- 문자열의 인덱스 위치의 요소를 반환
SET @word = SUBSTRING(@sTextData, 1, CHARINDEX(@SplitChar, @sTextData) - 1);
SET @word = LTRIM(RTRIM(@word));
-- 반환된 문자는 버린후 좌우공백 제거
SET @sTextData = LTRIM(RTRIM(RIGHT(@sTextData, LEN(@sTextData) - (LEN(@word) + 1))))
END
ELSE BEGIN
SET @word = NULL;
END
SET @num = @num + 1
END
RETURN(@word);
END
728x90
반응형
'DataBase > MSSQL' 카테고리의 다른 글
[MSSQL]MSSQL 날짜 변환표(GETDATE, CONVERT) (0) | 2021.11.09 |
---|---|
[MSSQL] SQL Server 에이전트로 API 호출 (0) | 2021.03.13 |
[MSSQL] 페이징 함수 OFFSET/FETCH (0) | 2019.07.10 |
[MSSQL] 이전행과 다음행 데이터를 가져오는 LAG,LEAD 함수 (0) | 2019.07.10 |
[MSSQL] 테이블, 컬럼 코멘트 조회 (0) | 2018.12.18 |