[Oracle] 오라클 REGEXP_COUNT 함수 사용법

오라클 SQL에서 정규식을 사용하여 문자열에 포함된 구분자의 개수 또는 문자나 문자열의 개수를 구할 때는 REGEXP_COUNT 함수를 사용하면 된다. REGEXP_COUNT 함수는 오라클 11g 이상에서 사용할 수 있으므로 하위 버전에서는 다른 방법을 사용해야 한다.

 

REGEXP_COUNT("문자열", "정규표현식", "시작위치", "일치옵션")
시작위치부터는 사용하지 않을 경우 생략할 수 있다.

 

목차

 

기본 사용법

SELECT REGEXP_COUNT('AAA,BBB,CCC,DDD', ',') AS result1
     , REGEXP_COUNT('AAA,BBB,CCC,DDD', 'A') AS result2
  FROM dual

 

 

REGEXP_COUNT 함수를 사용하여 문자열에 포함된 구분자(특수문자)를 세거나,

특정 문자 또는 문자열을 개수를 셀 수 있다.

 

SELECT REGEXP_COUNT('AAA,BBB,CCC,DDD', ',')    AS result1
     , REGEXP_COUNT('AAA,BBB,CCC,DDD', ',', 5) AS result2
  FROM dual

 

 

세 번째 인자에 시작 위치를 지정하면, 지정한 위치부터 문자열을 검색 후 개수를 센다.

 

SELECT REGEXP_COUNT('AAA,BBB,CCC,DDD', 'a')         AS result1
     , REGEXP_COUNT('AAA,BBB,CCC,DDD', 'a', 1, 'i') AS result2
  FROM dual

 

 

네 번째 인자에 "i"를 입력하면 대소문자 구분 없이 문자열을 검색한다.

 

숫자, 특수문자, 영문자, 한글 개수 세기

SELECT REGEXP_COUNT('abc@ABC@123@가나다', '\d')          AS result1
     , REGEXP_COUNT('abc@ABC@123@가나다', '[0-9]')       AS result2
     , REGEXP_COUNT('abc@ABC@123@가나다', '[[:digit:]]') AS result3
  FROM dual

 

 

\d, [0-9], [[:digit:]]는 모두 숫자를 의미하므로, 자신에게 편한 형식을 사용하면 된다.

문자 클래스( [ ] )를 사용할 경우 윈 하는 숫자 범위를 지정할 수 있다. (예, 0~5 → [0-5])

 

SELECT REGEXP_COUNT('abc@ABC@123@가나다', '[[:punct:]]') AS result1
     , REGEXP_COUNT('abc,ABC,123,가나다', '[[:punct:]]') AS result2
     , REGEXP_COUNT('abc/ABC/123/가나다', '[[:punct:]]') AS result3
  FROM dual

 

 

[[:punct:]]는 모든 특수문자를 의미한다. 문자열에 포함된 모든 특수문자 개수를 센다.

특정 특수문자만 검색하고 싶다면, 문자열 클래스( [ ] )를 사용하면 된다. (예, [!@#$%&,])

 

SELECT REGEXP_COUNT('abc@ABC@123@가나다', '[a-zA-Z]') AS result1
     , REGEXP_COUNT('abc@ABC@123@가나다', '[a-z]')    AS result2
     , REGEXP_COUNT('abc@ABC@123@가나다', '[A-Z]')    AS result3
  FROM dual

 

 

[a-zA-Z]는 모든 영문자, [a-z]는 소문자, [A-Z]는 대문자를 찾을 때 사용할 수 있다.

[[:alpha:]]는 모든 영문자를 의미하지만 한글까지 체크할 수 있으므로 사용 시 주의해야 한다.

 

SELECT REGEXP_COUNT('abc@ABC@123@가나다', '[가-힣]') AS result
  FROM dual

 

 

[가힣]은 한글을 찾을 때 사용할 수 있다.

 

고급 활용 예제

 SELECT REGEXP_SUBSTR('abc,ABC,123,가나다', '[^,]+', 1, LEVEL) AS result
   FROM dual
CONNECT BY LEVEL <= REGEXP_COUNT('abc,ABC,123,가나다', ',') + 1

 

 

REGEXP_COUNT 함수로 구분자의 개수를 구하여, 구분자 개수만큼 REGEXP_SUBSTR 함수로 문자열을 잘라서 행으로 변환할 수 있다. 구분자 개수 + 1을 해줘야 마지막 값까지 자를 수 있다.

 

WITH temp AS
(
    SELECT 'MANAGER' job, 'BLAKE,JONES,CLARK' ename_list FROM dual
    UNION ALL
    SELECT 'SALESMAN' job, 'ALLEN,TURNER,MARTIN,WARD' ename FROM dual
)

SELECT a.job
     , REGEXP_SUBSTR(a.ename_list, '[^,]+', 1, b.row_cnt) AS ename
  FROM temp a
     , (SELECT LEVEL row_cnt FROM dual CONNECT BY LEVEL <= 10) b --구분자 최대 개수
 WHERE b.row_cnt <= REGEXP_COUNT(a.ename_list, ',') + 1
 ORDER BY job, ename

 

 

첫 번째 문자열을 구분자로 잘라서 행으로 변환하는 예제를 조금 더 응용하여, 실제 테이블의 데이터에서 특정 칼럼의 값을 구분자로 잘라서 행으로 변환하는 예제이다. b 테이블에서 최대 구분자가 올 수 있는 개수를 지정해 줘야 한다.

 

[Oracle] 정규식 사용법 쉽게 설명 (REGEXP)

오라클 10g부터 정규식을 사용할 수 있도록 함수가 추가되었다. 정규식을 사용하면 문자열을 패턴으로 찾거나 자를 수 있기 때문에 기존의 복잡하게 구현된 쿼리문을 정규식 함수를 사용하여 간

gent.tistory.com

 

[Oracle] 오라클 REGEXP_SUBSTR 함수 사용법

오라클 SQL에서 정규식을 사용하여 문자열을 자르기 위해서는 REGEXP_SUBSTR 함수를 사용하면 된다. REGEXP_SUBSTR 함수는 SUBSTR 함수에서 정규식을 사용할 수 있도록 확장한 함수라고 생각하면 된다. 정

gent.tistory.com

 

[Oracle] 오라클 REGEXP_LIKE 함수 사용법

오라클 SQL에서 정규식 LIKE를 사용하기 위해서는 REGEXP_LIKE 함수를 사용하면 된다. 정규식을 사용하면 숫자, 특수문자 등을 쉽게 검색할 수 있고 날짜, 전화번호 등 형식이 있는 문자열도 패턴을

gent.tistory.com

 

[Oracle] 오라클 REGEXP_REPLACE 함수 사용법

오라클 SQL에서 정규식을 사용하여 치환(REPLACE)을 하기 위해서 REGEX_REPLACE 함수를 사용하면 된다. 정규식을 사용하면 공백, 숫자, 특수문자 등을 쉽게 제거할 수 있으며, 특정 문자열 패턴으로 치

gent.tistory.com

 

[Oracle] 오라클 REGEXP_INSTR 함수 사용법

오라클 SQL에서 정규식을 사용하여 문자열의 위치를 찾으려면 REGEXP_INSTR 함수를 사용하면 된다. 기본 함수 INSTR 함수를 사용하면 단순 문자열의 위치만 찾을 수 있지만, REGEXP_INSTR 함수를 사용하면

gent.tistory.com

 

[Oracle] 문자열에서 특정 문자 개수 (10g 이하)

오라클에서 문자열에서 특정 문자의 개수를 구하기 위해서는 아래의 2가지 방법을 사용하면 쉽게 구할 수 있다. 특히 값을 특수문자로 구분하여 하나의 컬럼에 저장하였을 경우 값의 개수를 구

gent.tistory.com

 

댓글

Designed by JB FACTORY