오라클 정규 표현식 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 포맷인 경우에는 점(.)을 대시(-)로 바꿔주면 됩니다.
하이픈(-)은 점(.)과 달리 원래 정규표현식 문법에서 특정한 의미가 없는 일반 문자이기 때문에 앞에 역슬래시(\)를 붙여줄 필요는 없습니다.
'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 |
댓글