특정 스트링에서 어떤 구분자의 개수가 몇개인지 알아오는 함수를 구현 중입니다.
이래저래 다른 사람들의 구현 방식을 찾아보다 보니, 아주 쿨~한 방식을 사용한 사람이 있어서 차용하였습니다.
방식은 이렇습니다. 먼저 스트링에서 특정 구분자를 모두 널('')로 바꿉니다. 그리고 나서 원래 길이와 구분자를 없애버린 문자의 길이의 차이를 반환하는 것이지요. 성능적으로야 replace 가 한번 더 들어가야 하기에 그냥 순차적으로 도는 것보다 느리겠지만, 그래도 코드가 아주 쿨하지 않습니까. 작은 길이의 스트링 변환일 경우, 유용하게 사용할 수 있는 함수입니다. 누군가 생각해낸 쿨한 방법이 기특해서 차용합니다. 흐흐.
-- @brief 특정 스트링의 delimiter 개수를 센다.
CREATE FUNCTION fnGetDelimiterCount(ALIAS_ VARGRAPHIC(15000), Delimiter_ VARGRAPHIC(16))
RETURNS INT
BEGIN ATOMIC
DECLARE Count_ INT;
DECLARE SubStr VARCHAR(15000);
SET SubStr = ALIAS_;
IF LENGTH(SubStr) > 0 then
SET Count_ = LENGTH(SubStr) - LENGTH(REPLACE(SubStr, Delimiter_, ''));
ELSE
SET Count_ = 0;
END IF;
RETURN Count_;
END;
이래저래 다른 사람들의 구현 방식을 찾아보다 보니, 아주 쿨~한 방식을 사용한 사람이 있어서 차용하였습니다.
방식은 이렇습니다. 먼저 스트링에서 특정 구분자를 모두 널('')로 바꿉니다. 그리고 나서 원래 길이와 구분자를 없애버린 문자의 길이의 차이를 반환하는 것이지요. 성능적으로야 replace 가 한번 더 들어가야 하기에 그냥 순차적으로 도는 것보다 느리겠지만, 그래도 코드가 아주 쿨하지 않습니까. 작은 길이의 스트링 변환일 경우, 유용하게 사용할 수 있는 함수입니다. 누군가 생각해낸 쿨한 방법이 기특해서 차용합니다. 흐흐.
-- @brief 특정 스트링의 delimiter 개수를 센다.
CREATE FUNCTION fnGetDelimiterCount(ALIAS_ VARGRAPHIC(15000), Delimiter_ VARGRAPHIC(16))
RETURNS INT
BEGIN ATOMIC
DECLARE Count_ INT;
DECLARE SubStr VARCHAR(15000);
SET SubStr = ALIAS_;
IF LENGTH(SubStr) > 0 then
SET Count_ = LENGTH(SubStr) - LENGTH(REPLACE(SubStr, Delimiter_, ''));
ELSE
SET Count_ = 0;
END IF;
RETURN Count_;
END;
'Programming > Database' 카테고리의 다른 글
[MS-SQL] IP Range 얻어오기 (0) | 2011.05.19 |
---|---|
[MSSQL] 테이블에 조건 없이 특정 개수 삭제하기 (2) | 2010.12.02 |
[DB2] 문자열의 몇번째 구분자 정보 얻어오기/변경하기 (0) | 2010.08.11 |
[DB2] 스트링을 특정 구분자로 분리하여 테이블로 리턴하는 함수 (0) | 2010.08.11 |
[DB2] 특정 쿼리 결과에 순차적으로 번호 붙이기 (0) | 2010.08.05 |
댓글