2019. 12. 27. 22:35
반응형

mysql에서 정규표현식은 크게 2가지로 나뉩니다.
1. select 절에서의 사용 (regexp_replace)
2. where 절에서의 사용 (regexp_like)

결국 검색용으로 정규식을 쓸것인지 조회값을 변경하기 위해 쓸것인지로 보면 되겠죠
하지만 위에서 언급한 두 함수 regexp_replace와 regexp_like의 경우 mysql 8 이상 부터에서만 사용가능 합니다.
이전 버전에서는 사용할 수 없기 때문에 다른 방법을 사용해야 된다는 말이죠

1. regexp_replace
regexp_replace의 경우에는 함수를 직접 만들어 주면 됩니다.
참고 : https://techras.wordpress.com/2011/06/02/regex-replace-for-mysql/

DELIMITER $$
CREATE FUNCTION  `regexp_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original 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;
 ELSE
  SET temp = original;
 END IF;
 RETURN temp;
END$$
DELIMITER ;

function 이름과 값 할당 순서를 잘 봐야 됩니다.
mysql8의 경우에는 regexp_replace(원본, 변경할 대상, 변경할 값) 이지만,
해당 함수의 경우에는 regexp_replace(변경할 대상, 변경할 값, 원본) 입니다.
ex) SELECT regexp_replace("[0-9]","","abcdefg123456");
결과) abcdefg

2. regexp_like
mysql8의 경우에는 regexp_like 함수가 없기 때문에 그냥 regexp를 사용해야 합니다.
ex) select * from test where column1 regexp '^[a-zA-Z]+'
결과) column1의 컬럼값이 영문자로 시작하는 대상 출력


REGEXP_INSTR, REGEXP_SUBSTR 함수도 있지만 가장 많이 사용하는 정규식 replace 구문과 정규식 검색 부분만 설명 하였습니다.

 

반응형

'Db > Mysql' 카테고리의 다른 글

mysql server character set 변경  (3) 2011.03.29
Posted by seongsland