본문 바로가기
Be Smart/SQL

[Oracle] Like 구문의 업그레이드 버전 , regexp_like

by 반월하 2021. 11. 8.
728x90

오라클 정규 표현식 regexp_like를 이용해서 기존에 like 만 가지고 조회하기 어려웠던 것을 매우 쉽게 하는 것을 살펴봤습니다.

이번에는 좀 더 복잡한 형태의 like 조회 예제를 해보겠습니다.

이 전화번호 데이터에서 포맷과 일치하는 데이터만 조회하고자 하는 경우, 일반 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) 소개 메인 페이지

728x90

'Be Smart > SQL' 카테고리의 다른 글

[Oracle] 오라클 REPLACE 함수 (엔터, 탭 제거)  (0) 2021.11.16
[오라클] SELECT 개수 제한  (0) 2021.11.08
[SQLD] (3) SQL기본  (0) 2021.10.26
[SQLD] (2) 데이터 모델과 성능  (0) 2021.10.25
[SQL] NULL 값 치환하기 - NVL, NVL2  (0) 2021.10.20

댓글