[DB2] 특정 스트링의 구분자 개수 얻어오기

Programming/Database 2010.08.11 댓글 Joshua95
특정 스트링에서 어떤 구분자의 개수가 몇개인지 알아오는 함수를 구현 중입니다.
이래저래 다른 사람들의 구현 방식을 찾아보다 보니, 아주 쿨~한 방식을 사용한 사람이 있어서 차용하였습니다.

방식은 이렇습니다. 먼저 스트링에서 특정 구분자를 모두 널('')로 바꿉니다. 그리고 나서 원래 길이와 구분자를 없애버린 문자의 길이의 차이를 반환하는 것이지요. 성능적으로야 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;

댓글