본문 바로가기

IT관련

오라클 정규표현식 함수 regexp_count 함수 샘플예제 (문자열내에 반복 패턴 카운트)

오라클에서 제공하는 정규표현식(Regular Expression) 지원 함수중에서 regexp_count() 함수는 문자열중에 매칭되는 문자열 또는 패턴이 몇번 나오는지 카운트 합니다.

 

Oracle 의 기존 count() 함수는 로우갯수(레코드 갯수)를 세는데 반해,

regexp_count() 는 하나의 문자열내에서 반복문자열의 갯수를 세는 점이 크게 다릅니다.

 

regexp_count 기본 구문(Syntax)는 다음과 같습니다.

 

예제를 통해서 사용법을 확인해보면,

 

문자열내 3번째 위치부터 '123' 이 몇번 반복되는지 카운트

'123123123123' 문자열에서 '123' 은 4번 반복되는데, 3번째 문자위치부터 카운트해서 3번 이라는 결과가 나왔습니다.

 

 

문자열내에서 'CD' 가 몇번 반복되는지 카운트 (대소문자 구분)

4번째 인자인 'c' 는 대소문자를 구분(Case Sensitive) 하라는 의미입니다.

대소문자 무시는 'i' (Ignore) 를 사용합니다.

 

 

전화번호 포맷이 999.999.999 과 일치하는 데이터 찾기

앞에서는 select 절에 regexp_count() 함수를 사용했었는데, 이번에는 where 조건절에 사용했습니다.

패턴에 매칭되는 게 있으면 1 이상의 값이 리턴되고, 매칭되는게 없으면 0 이 리턴됩니다.

 

이렇게 사용하면, 정확히 regexp_like() 를 이용하는 것과 똑같아집니다.

 

[: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] 등이 있습니다.

자세한 것은 여길 참조하세요 ==> 정규 표현식 - 위키백과

 

 

▶ 참고 : 오라클 정규표현식(Regular Expression) 소개 메인 페이지