본문 바로가기

IT관련

오라클 like 구문 업그레이드 regexp_like 샘플예제 (전화번호 포맷이 일치하지 않는 데이터 찾아내기 SQL문)

앞에서 오라클 정규표현식 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) 소개 메인 페이지