티스토리 뷰

DBMS/MySQL

MySQL에서 오라클의 REGEXP_REPLACE 함수 구현하기

일상의 기록을 남긴다 2018. 4. 4. 09:16

최근 회사에서 Oracle 쿼리를 MySQL로 컨버팅 하는 작업을 해야했다.


MySQL은 처음이라 많이 삽질했다. 왜 MySQL은 Oracle의 편리한 기능(함수 또는 펑션)이 거의 없는지...


Connect by 도 없고 REGEXP_ 계열도 없고, TO_NUMBER도 없고...


물론 비슷하게 흉내낼 수 있다. 하지만 여전히 불편함이 많다...


잡설이 길었군...어쨌든... 오라클의 REGEXP_REPLACE 함수를 MYSQL에서 사용하기 위해서


함수(펑션)을 구현해서 사용하자. 함수 생성 후 사용법은 오라클의 것과 동일하다.


======================================================

DELIMITER //


DROP FUNCTION IF EXISTS regexp_replace//


CREATE FUNCTION  regexp_replace(original VARCHAR(1000),pattern VARCHAR(1000),replacement VARCHAR(1000))

    RETURNS VARCHAR(1000)

    DETERMINISTIC

BEGIN 

    DECLARE temp VARCHAR(1000); 

    DECLARE ch VARCHAR(1); 

    DECLARE i INT;

    SET i = 1;

    SET temp = '';

    IF original REGEXP pattern THEN 

        loop_label: LOOP 

        IF i > CHAR_LENGTH(original) THEN

            LEAVE loop_label;  

        END IF;

        SET ch = SUBSTRING(original,i,1);

        IF NOT ch REGEXP pattern THEN

            SET temp = CONCAT(temp,ch);

        ELSE

            SET temp = CONCAT(temp,replacement);

        END IF;

            SET i=i+1;

        END LOOP;n

    ELSE

        SET temp = original;

    END IF;

    RETURN temp;

END//


DELIMITER ;

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함