이번에는 오라클 정규표현식의 여러 함수 중 REGEXP_SUBSTR() 에 대한 복습이다.
SUBSTR 이 단순하게 인덱스를 지정해 문자열을 잘라냈다고 한다면 REGEXP_SUBSTR 은 정규식을 이용해
좀 더 다양한 방법, 다양한 패턴으로 문자열을 자르는 것이 가능하다.
예를 들자면 이메일 주소에서 아이디, 도메인을 잘라서 따로 표기해야 한다고 했을 때
SUBSTR 은 뭐 @ 의 인덱스를 찾고 어쩌고 뭐하고 했을 것을 간단하게 아래와 같은 문장으로 처리할 수 있다.
SELECT MEM_EMAIL , REGEXP_SUBSTR(MEM_EMAIL, '[^@]+', 1, 1) AS EMAIL_ID , REGEXP_SUBSTR(MEM_EMAIL, '[^@]+', 1, 2) AS EMAIL_DOMAIN FROM REG_EXP_TEST
그럼 위의 문법에 대해서 공부해 볼건데 다른 블로그 보면 포지션이니 맷치 뭐시깽이니 어려운 말 많이 써놨는데
그런 건 됐고 외우기 쉽고 보기 쉽게 변환해서 공부해보자.
REGEXP_SUBSTR(COLUMN, [REG_EXP], [START_INDEX], [GROUP_INDEX])
COLUMN : 컬럼명을 지정한다. 위에선 MEM_EMAIL 컬럼을 대상으로 쿼리를 작성했다.
REG_EXP : 정규표현식을 작성한다.
START_INDEX : 해당 정규표현식을 검색할 문자열의 INDEX 를 지정한다.
이메일이 aquamiz@tistory.com 이라고 한다면 1이면 a, 2라면 q부터 검색을 시작한다.
GROUP_INDEX : 해당 정규표현식으로 잘라진 그룹이 2개 이상이라면 INDEX 를 지정해 그룹을 선택할 수 있다.
위 예시의 정규식에서는 @ 로 시작하지 않는 것으로 잘라라! 라고 했으니 @ 에 걸려 aquamiz 와 tistory.com 의 두 그룹으로 나뉘어진다.
그렇다면 만약 위의 정규식에서 약간의 변경을 준 다음과 같은 정규식이 있다고 하면 결과는 어떻게 될까?
SELECT MEM_EMAIL , REGEXP_SUBSTR(MEM_EMAIL, '[@]+', 1, 1) AS EMAIL_ID , REGEXP_SUBSTR(MEM_EMAIL, '[@]+', 1, 2) AS EMAIL_DOMAIN FROM REG_EXP_TEST
첫번째 문장인 REGEXP_SUBSTR(MEM_EMAIL, '[@]+', 1, 1) AS EMAIL_ID 는 당연히 @ 가 결과로 나올 것이고,
두번째 문장인 REGEXP_SUBSTR(MEM_EMAIL, '[@]+', 1, 2) AS EMAIL_DOMAIN 은 당연히 null 이 결과로 나온다.
왜 이렇게 되느냐면 @ 를 자르겠다고 했으니 1그룹에서는 당연히 @ 만 들어있을 것이고
@ 는 하나만 존재하니 당연히 2그룹은 존재 자체를 하지 않을 것이기 때문이다.
'개발 > 오라클' 카테고리의 다른 글
오라클 - 문자열을 자릿수만큼 채워주는 LPAD(), RPAD() 함수 (0) | 2018.04.14 |
---|---|
오라클 - 정규표현식 함수 REGEXP_REPLACE() (0) | 2018.04.01 |
오라클 - function (펑션) 만들기 기초문법. (0) | 2018.03.17 |
오라클 - SQLGate2010 으로 function (펑션) 생성 시 주의, ORA-06575 : 패키지 또는 함수 ~ 은 부적당한 상태입니다. (0) | 2018.03.17 |
댓글