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

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

by 기서무나구물 2021. 12. 20.

포스팅 목차

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


    [ SUBSTR Oracle Function ]

     


    SUBSTR 함수는 문자열 Char에서 position 문자 위치를 시작해서 substring_length 문자 길이만큼 문자열을 추출하여 반환한다. SUBSTR 함수는 입력 문자 세트에 의해 정의된 문자를 이용하여 길이를 측정한다. SUBSTRB함수는 문자 대신에 바이트를 사용한다. SUBSTRC함수는 UNICODE를 사용한다. SUBSTR2 함수는 UCS2 코드 포인트를 사용한다. SUBSTR4 함수는 UCS4 코드 포인트를 사용한다.

     

     


    1. Oracle(오라클)

     

    substr() 함수

     

    Oracle Programming
    SELECT SUBSTR('ABCDEFG', 3)    SUBSTR_FUNC_1,
           SUBSTR('ABCDEFG', 3, 2) SUBSTR_FUNC_2
    FROM   DUAL;

     

    Results
    SUBSTR_FUNC_1	SUBSTR_FUNC_2
    ------------------------------
    CDEFG		CD

     


    2. Python Pandas(파이썬)

     

    index

    ‘ABCDEFG’ 문자열의 인덱스 0을 시작으로 1씩 증가시키면서 인덱스 2까지 문자열을 추출한다.  ‘ABCDEFG’ 문자열의 맨 처음을 시작으로 3자리 문자열을 추출.

     

    Python Programming
    'ABCDEFG'[0:3:1]

     

    Results
    'ABC'

     


    index

    사원명의 맨 처음을 시작으로 추출 간격은 1씩 증가시켜서 3자리 문자열을 추출한다.

     

    Python Programming
    emp['ename'].apply(lambda x : x[0:3:1]).head(7)

     

    Results
    0    SMI
    1    ALL
    2    WAR
    3    JON
    4    MAR
    5    BLA
    6    CLA
    Name: ename, dtype: object

     


    str.slice() 함수

     

    Python Programming
    emp['ename'].str.slice(start=0, stop=3, step=1).head(7)

     

    Results
    0    SMI
    1    ALL
    2    WAR
    3    JON
    4    MAR
    5    BLA
    6    CLA
    Name: ename, dtype: object

     

     

     


    3. R Programming (R Package)

     

    base::substr() 함수

    ‘ABCDEFG’ 문자열의 인덱스 1을 시작으로 3자리 문자열을 추출한다.

     

    R Programming
    %%R
    
    base::substr('ABCDEFG',1,3)

     

    Results
    [1] "ABC"

     


    base::substring() 함수

     

    R Programming
    %%R
    
    base::substring('ABCDEFG',1,3)

     

    Results
    [1] "ABC"

     


    stringr::str_sub 함수

     

    R Programming
    %%R
    
    stringr::str_sub('ABCDEFG',1,3)

     

    Results
    [1] "ABC"

     


    substr() 함수

    사원명의 맨 처음을 시작으로 3자리 문자열을 추출한다.

     

    R Programming
    %%R
    
    substr(emp$ename,1,3)

     

    Results
     [1] "SMI" "ALL" "WAR" "JON" "MAR" "BLA" "CLA" "SCO" "KIN" "TUR" "ADA" "JAM"
    [13] "FOR" "MIL"

     

     

     


    4. R Dplyr Package

     

    stringr::str_sub() , base::substr(), base::substring() 함수

    사원명의 맨 처음을 시작으로 3자리 문자열을 추출한다.

     

    R Programming
    %%R
    
    emp %>%
      dplyr::mutate( sub_str_1 = stringr::str_sub(ename,1,3),
                     sub_str_2 = stringr::str_sub(ename,-3,-1),
                     sub_str_3 = base::substr(ename,1,3),
                     sub_str_4 = base::substring(ename,1,3)) %>%
      dplyr::select ( -hiredate,-job ) %>%
      head(10)

     

    Results
    # A tibble: 10 x 10
       empno ename    mgr   sal  comm deptno sub_str_1 sub_str_2 sub_str_3 sub_str_4
       <dbl> <chr>  <dbl> <dbl> <dbl>  <dbl> <chr>     <chr>     <chr>     <chr>    
     1  7369 SMITH   7902   800    NA     20 SMI       ITH       SMI       SMI      
     2  7499 ALLEN   7698  1600   300     30 ALL       LEN       ALL       ALL      
     3  7521 WARD    7698  1250   500     30 WAR       ARD       WAR       WAR      
     4  7566 JONES   7839  2975    NA     20 JON       NES       JON       JON      
     5  7654 MARTIN  7698  1250  1400     30 MAR       TIN       MAR       MAR      
     6  7698 BLAKE   7839  2850    NA     30 BLA       AKE       BLA       BLA      
     7  7782 CLARK   7839  2450    NA     10 CLA       ARK       CLA       CLA      
     8  7788 SCOTT   7566  3000    NA     20 SCO       OTT       SCO       SCO      
     9  7839 KING      NA  5000    NA     10 KIN       ING       KIN       KIN      
    10  7844 TURNER  7698  1500     0     30 TUR       NER       TUR       TUR      

     

     

     


    5. R sqldf Package

     

    substr() 함수

     

    R Programming
    %%R
    
    sqldf(" SELECT SUBSTR('ABCDEFG', 3)    sub_str_1,
                   SUBSTR('ABCDEFG', 3, 2) sub_str_2 ")

     

    Results
      substr_1 substr_2
    1    CDEFG       CD

     


    substr() 함수

     

    R Programming
    %%R
    
    sqldf(" SELECT ename, 
                   SUBSTR(ename,1,3) sub_str_1
            from   emp  ")[1:10, ]

     

    Results
        ename sub_str_1
    1   SMITH       SMI
    2   ALLEN       ALL
    3    WARD       WAR
    4   JONES       JON
    5  MARTIN       MAR
    6   BLAKE       BLA
    7   CLARK       CLA
    8   SCOTT       SCO
    9    KING       KIN
    10 TURNER       TUR

     

     

     


    6. Python pandasql Package

     

    substr() 함수

     

    Python Programming
    ps.sqldf(" SELECT SUBSTR('ABCDEFG', 3)    sub_str_1,     \
                      SUBSTR('ABCDEFG', 3, 2) sub_str_2 ")

     

    Results
    	sub_str_1	sub_str_2
    0	CDEFG		CD

     

     

     


    7. R data.table Package

     

    stringr::str_sub() , base::substr() , base::substring() 함수

    사원명의 맨 처음을 시작으로 3자리 문자열을 추출한다.

     

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[,`:=`(sub_str_1 = stringr::str_sub(ename,1,3),
             sub_str_2 = base::substr(ename,1,3),
             sub_str_3 = base::substring(ename,1,3))][, c("job","hiredate"):=NULL][1:10, ]

     

    Results
        empno  ename  mgr  sal comm deptno sub_str_1 sub_str_2 sub_str_3
     1:  7369  SMITH 7902  800   NA     20       SMI       SMI       SMI
     2:  7499  ALLEN 7698 1600  300     30       ALL       ALL       ALL
     3:  7521   WARD 7698 1250  500     30       WAR       WAR       WAR
     4:  7566  JONES 7839 2975   NA     20       JON       JON       JON
     5:  7654 MARTIN 7698 1250 1400     30       MAR       MAR       MAR
     6:  7698  BLAKE 7839 2850   NA     30       BLA       BLA       BLA
     7:  7782  CLARK 7839 2450   NA     10       CLA       CLA       CLA
     8:  7788  SCOTT 7566 3000   NA     20       SCO       SCO       SCO
     9:  7839   KING   NA 5000   NA     10       KIN       KIN       KIN
    10:  7844 TURNER 7698 1500    0     30       TUR       TUR       TUR

     


    8. Python Duckdb의 SQL

     

     

    Python Programming
    %%sql
      SELECT SUBSTR('ABCDEFG', 3)    as sub_str1,
             SUBSTR('ABCDEFG', 3, 2) as sub_str2

     

     

    Python Programming
    duckdb.sql(" SELECT SUBSTR('ABCDEFG', 3)    as sub_str1,           \
                        SUBSTR('ABCDEFG', 3, 2) as sub_str2 ").df()

     

     

    Results
      sub_str1 sub_str2
    0    CDEFG       CD

     


    ( https://unsplash.com/photos/R-srioOZAIU )

     

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

     

     

    [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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크
    반응형

    댓글