앞에서 오라클 정규표현식 regexp_like 를 이용해서 기존에 like 만 가지고 조회하기 어려웠던 것을 매우 쉽게 하는 것을 살펴봤습니다.
이번에는 좀더 복잡한 형태의 like 조회 예제를 해보겠습니다.
오라클 hr 샘플유저에 있는 EMPLOYEES 테이블의 phone_number 를 조회하면, 아래와 같이 전화번호가 2가지 형태로 들어가 있습니다.
이 전화번호 데이터에서 특정 형태(포맷)와 일치하는 데이터만 조회하고자 하는 경우, 일반 like 문으로는 구현하기 매우 까다롭습니다.
하지만, regexp_like(...) 를 이용하면 아주 간단하게 조회할 수 있습니다.
패턴문자열 '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})' 는 999.999.9999 형태의 전화번호만 찾는 패턴입니다.
[:digit] 를 [ ] 안에 넣어서 [[:digit]] 가 되었습니다.
[ ] 는 "안에 들어있는 문자들중에 하나" 라는 의미입니다.
[:digit] 는 숫자의 묶음을 나타내는 숫자클래스 입니다. 0~9 를 가리킵니다.
[[:digit]] 를 다르게 쓰면 [0-9] 과 같이 쓸 수 있습니다. [ ] 안에서 - 는 범위를 가리킵니다.
정리하면 다음과 같습니다.
[[:digit]]
= [0-9]
= [0123456789]
= 0|1|2|3|4|5|6|7|8|9
와 같습니다. 위 4가지는 모든 같은 의미입니다.
[:digit] 와 같은 문자클래스는 알파벳을 뜻하는 [:alpha], 대문자, 소문자를 뜻하는 [:upper], [:lower] 등이 있습니다.
자세한 것은 여길 참조하세요 ==> 정규 표현식 - 위키백과
[:digit] 대신 아래와 같이 [0-9] 를 써도 같은 결과가 나옵니다.
{3} 은 3번 반복하라는 의미입니다.
\. 은 점(.) 을 기호자체로 인식하라고 역슬래시(\)를 앞에 붙힌 것입니다.
역슬래시를 앞에 붙히지 않으면 점(.) 은 "1개의 문자를 의미" 하는 정규표현식 오퍼레이터가 됩니다.
이렇게 해서 위 패턴의 의미는 "숫자3자리 . 숫자3자리 . 숫자4자리" 의 의미가 됩니다.
만약, 위 패턴이 아닌 놈들만 찾고 싶다면, "not" 를 붙여주면 됩니다.
전화번호가 999-9999-9999 포맷인 경우에는 점(.) 을 대시(-) 로 바꿔주면 됩니다.
대시(-)는 점(.) 과 달리 원래 정규표현식 문법에서 특정한 의미가 없는 일반문자이기 때문에 앞에 역슬래시(\)를 붙여줄 필요는 없습니다.
▶ 참고 : 오라클 정규표현식(Regular Expression) 소개 메인 페이지
'IT관련' 카테고리의 다른 글
오라클 정규표현식 함수 regexp_instr, regexp_substr 샘플예제 (문자열의 위치 찾기, 추출하기) (0) | 2020.12.10 |
---|---|
오라클 정규표현식 함수 regexp_count 함수 샘플예제 (문자열내에 반복 패턴 카운트) (0) | 2020.12.09 |
오라클 like 구문 업그레이드 regexp_like 샘플예제 (정규표현식 기본 응용) (0) | 2020.12.09 |
오라클 정규식, 정규표현식(Regular Expression) 이란? 그리고 사용방법. (0) | 2020.12.09 |
오라클 PL/SQL 함수(Function) 병렬처리 옵션 (parallel_enable) (0) | 2020.12.09 |