개요
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/