Database

[SQL] 정규식 관련 함수

비번변경 2023. 6. 6. 18:48

개요

SQL을 이용해 문자열의 포함여부 등을 확인할 때는 LIKE 문을 사용한다. 조건에 해당하는 문자열이 여럿인 경우, OR절로 연결해서 사용하기 때문에 쿼리문이 길어질 수 있다. (LIKE 문은 IN과 함께 사용할 수 없다.)

이런 경우 정규식을 사용하면 보다 간결한 쿼리문을 작성할 수 있다. 이 글에서는 정규식 관련 함수를 정리한다. 

 

 

REGEXP_MATCH

REGEXP_MATCH는 문자열과 패턴이 일치하는지 확인하고 일치한 문자열 배열을 반환한다. flags는 함수의 동작을 제어하는데 예로 들어 i가 들어가는 경우 대소문자 구분을 하지 않는다. 

REGEXP_MATCHES(source_string, pattern [, flags])

-- 예시
SELECT 
    REGEXP_MATCHES('Learning #PostgreSQL #REGEXP_MATCHES', 
         '#([A-Za-z0-9_]+)', 
        'g');

 

실행 결과

| regexp_matches |
| -------------- |
| PostgreSQL     |
| REGEXP_MATCHES |

데이터베이스 엔진에 따라 REGEXP_LIKE라는 함수로 제공되기도 한다.

 

 

REGEXP_REPLACE

REGEXP_REPLACE 함수는 정규식과 일치하는 하위 문자열을 지정한 문자열로 대체한다. 

REGEXP_REPLACE(source, pattern, replacement_string,[, flags])   

-- 예제
SELECT REGEXP_REPLACE('John Doe','(.*) (.*)','\2, \1');

 

실행 결과

| regexp_replace |
| -------------- |
| Doe, John      |

 

 

참고 문서

https://www.postgresqltutorial.com/postgresql-string-functions/postgresql-regexp_matches/

https://www.postgresqltutorial.com/postgresql-string-functions/regexp_replace/