본문 바로가기
통계프로그램 비교 시리즈/오라클함수 비교(R & Python)

REGEXP_COUNT 오라클 함수 [Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table, DuckDB]

by 기서무나구물 2022. 1. 1.

포스팅 목차

    * 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크


    [ REGEXP_COUNT Oracle Function ]

     


    입력한 문자열에서 정규 표현식 패턴을 검색한 후 지정한 패턴의 발생 횟수를 반환한다.

     

    • 함수 설명 : 

     


    1. Oracle(오라클)

     

    REGEXP_COUNT() 함수

    REGEXP_COUNT 함수는 세 개의 인수를 받습니다. 첫 번째 인수는 검색할 문자열, 두 번째 인수는 검색할 패턴, 세 번째 인수는 검색을 시작할 위치이다. 세 번째 인수는 선택적이며, 지정하지 않으면 문자열의 시작부터 검색한다. 

    다음 예제는 2번째 위치에서 검색을 시작하여서 'abc' 문자열 패턴과 일치하는 문자열의 횟수를 반환한다.

    Oracle Programming
    SELECT REGEXP_COUNT('abcabcabc','abc', 2) 
    FROM   DUAL

     

    Results
    REGEXP_COUNT('ABCABCABC','ABC',2)
    -----------------------------------
    2

     


    2. Python Pandas(파이썬)

     

    re.findall() 와 len()

    문자열(‘abcabcabc’)에서 사용자가 지정한 패턴(“abc”)이 몇 번 발생했는지 검색하여 반환한다.

     

    Python Programming
    import re
    
    len(re.findall(r"abc", 'abcabcabc'))

     

    Results
    3

     

     


    3. R Programming (R Package)

     

     

    stringr::str_count() 함수와 stringr::str_sub() 함수

         - stringr 과 stringi 패키지 참고

     

    문자열(‘abcabcabc’)의 2번째 문자열 이후에 사용자가 지정한 패턴(“abc”)이 몇 번 발생했는지 검색하여 반환한다.

     

    R Programming
    %%R
    
    stringr::str_count(stringr::str_sub('abcabcabc',2), "abc")

     

    Results
    [1] 3

     


    stringr::str_locate_all 함수

    stringr::str_locate_all 함수는 문자열(‘abcabcabc’)을 검색하여서 사용자가 지정한 패턴(“abc”)의 시작 위치와 종료 위치를 반환한다.

     

    R Programming
    %%R
    
    stringr::str_locate_all('abcabcabc', "abc")

     

    Results
    [[1]]
         start end
    [1,]     1   3
    [2,]     4   6
    [3,]     7   9

     

     


    4. R Dplyr Package

     

    stringr::str_count() 함수

    직무 이름의 문자열에서 “A” 문자가 존재하는 횟수를 반환한다.

     

    R Programming
    %%R
    
    emp %>%
      dplyr::mutate( str_cnt = stringr::str_count(job,"A")) %>%
      head(7)

     

    Results
    # A tibble: 7 x 9
      empno ename  job        mgr hiredate     sal  comm deptno str_cnt
      <dbl> <chr>  <chr>    <dbl> <date>     <dbl> <dbl>  <dbl>   <int>
    1  7369 SMITH  CLERK     7902 1980-12-17   800    NA     20       0
    2  7499 ALLEN  SALESMAN  7698 1981-02-20  1600   300     30       2
    3  7521 WARD   SALESMAN  7698 1981-02-22  1250   500     30       2
    4  7566 JONES  MANAGER   7839 1981-04-02  2975    NA     20       2
    5  7654 MARTIN SALESMAN  7698 1981-09-28  1250  1400     30       2
    6  7698 BLAKE  MANAGER   7839 1981-03-01  2850    NA     30       2
    7  7782 CLARK  MANAGER   7839 1981-01-09  2450    NA     10       2

     

     

     


    5. R sqldf Package

     

    length() 함수와 replace() 함수

    abc 문자열의 출현 횟수를 카운트

     

    R Programming
    %%R
    
    sqldf(" select (length('abcabcabc') - length(replace('abcabcabc','abc','') ))/3 abc_cnt" )

     

    Results
      abc_cnt
    1       3

     


    length() 함수와 replace() 함수

    두 번째 문자열 이후에 존재하는 abc의 출현 횟수를 카운트

     

    R Programming
    %%R
    
    sqldf(" select ( length( substr('abcabcabc' , 2 ) ) - length( replace(substr('abcabcabc' , ( instr('abcabcabc','abc') + 3 ) ), 'abc','') ) ) / 3 as REGEXP_COUNT" )

     

    Results
      REGEXP_COUNT
    1            2

     

     


    6. Python pandasql Package

     

    length() 함수와 replace() 함수

     

    Python Programming
    ps.sqldf(" select ( length( substr('abcabcabc' , 2 ) ) - length( replace(substr('abcabcabc' , ( instr('abcabcabc','abc') + 3 ) ), 'abc','') ) ) / 3 as REGEXP_COUNT ")

     

    Results
    	REGEXP_COUNT
    0	2
     

     


    7. R data.table Package

     


    8. Python Duckdb의 SQL

     

    Python Programming
    %%sql
      select (length('abcabcabc') - length(replace('abcabcabc','abc','') ))/3 abc_cnt

     

    Python Programming
    duckdb.sql(" select (length('abcabcabc') - length(replace('abcabcabc','abc','') ))/3 as abc_cnt ").df()

     

    Results
       abc_cnt
    0      3.0

     


     

    Python Programming
    %%sql
      select FLOOR( ( length( substr('abcabcabc' , 2 ) ) - length( replace(substr('abcabcabc' , ( instr('abcabcabc','abc') + 3 ) ), 'abc','') ) ) / 3 ) as REGEXP_CNT

     

    Python Programming
    duckdb.sql(" select FLOOR( ( length( substr('abcabcabc' , 2 ) ) - length( replace(substr('abcabcabc' , ( instr('abcabcabc','abc') + 3 ) ), 'abc','') ) ) / 3 ) as REGEXP_CNT ").df()

     

    Results
       REGEXP_CNT
    0         2.0

     


    https://unsplash.com/photos/JhevWHCbVyw

      --------------------------------------------  

     

     

    [Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table] 오라클 함수와 R & Python 비교 사전 목록 링크

     

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크
    반응형

    댓글