[Oracle] 문자열에서 특정 문자 개수 구하기 (REGEXP_COUNT)

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

 

오라클 특정 문자 개수 구하기

 

REGEXP_COUNT 함수를 이용하는 방법 (오라클 11g 이상)

SELECT REGEXP_COUNT('A/B/C/D', '/')
  FROM dual

 

 

위의 예제는 문자열에 포함된 슬래쉬("/") 개수를 세는 방법이다.


오라클 11g부터 사용 가능한 REGEXP_COUNT 정규식 함수를 사용하여 문자열에 포함된 특정 문자 개수를 쉽게 구할 수 있다. 오라클 버전이 11g 아래 버전이면 아래 두 번째 방법을 사용해야 한다.

 

SELECT REGEXP_COUNT('A,B,C', ',')    --쉼표 개수
     , REGEXP_COUNT('DATABASE', 'A') --영문자A 개수
  FROM dual

 


 

특수문자 외에도 일반 문자의 개수를 세는 것도 가능하다. REGEXP_COUNT 함수는 정규식을 사용할 수 있으므로 정규식을 사용하면 다양한 패턴의 문자를 셀 수 있다.

 

LENGTH, REPLACE 함수를 이용하는 방법 (오라클 10g 이하)

SELECT LENGTH('A/B/C/D') - LENGTH(REPLACE('A/B/C/D', '/'))
  FROM dual

 

 

문자열에 포함된 슬래시("/")를 모두 치환하여 없애고, 원 문자열의 길이에서 치환된 문자열의 길이를 빼면 치환하여 없어진 특정 문자의 개수를 구할 수 있다.

 

오라클 10g 까지는 위의 방법으로 문자열에 포함된 특정 문자의 개수를 구할 수 있다.

 

SELECT LENGTH('A,B,C') - LENGTH(REPLACE('A,B,C', ','))       --쉼표 개수
     , LENGTH('DATABASE') - LENGTH(REPLACE('DATABASE', 'A')) --영문자A 개수
  FROM dual

 

 

REGEXP_COUNT 함수를 사용하는 방법보다 조금 복잡하지만 동일한 결과를 얻을 수 있다.

 

활용 예제 및 주의 사항


 

컬럼의 문자열에서 특정 문자를 개수를 구할 수 있다. 영문 성명에서 "R"의 개수를 구하는 예제이다.

 

 

 LENGTH, REPLACE 함수를 이용하여 2개 이상의 문자의 포함된 개수를 구할 때는 주의해야 한다. 최종 결과에서 찾은 문자열의 길이만큼 나눠줘야 정확한 결과를 얻을 수 있다.

 

 

댓글

Designed by JB FACTORY