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

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

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

포스팅 목차

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


    [ TRANSLATE Oracle Function ]

     


    TRANSLATE 함수는 문자열 expr의 개별 문자를 체크하여서 from_string에 존재하면 해당 문자를 to_string에서 대응하는 위치의 문자로 치환하여 expr을 반환한다. from_string 안에 존재하지 않는 expr안의 문자는 치환되지 않는다. 만약 expr이 문자열이라면, 홑 따옴표로 둘러쌓여야 한다. 인수 from_string는 to_string보다 더 많은 문자를 가질 수 있다. 이 경우에, from_string의 마지막에 있는 여분의 문자는 to_string안에 상응하는 문자가 없다. 만약 이 여분의 문자가 char안에 있는 경우, 그러한 문자는 반환 값으로부터 삭제된다.

     

     


    1. Oracle(오라클)

     

    TRANSLATE() 함수

    문자열(‘ABCXYDEFZ’)의 개별 문자를 문자열 ‘ABCDE’에서 검색하여서 존재하면 해당 문자를 문자열 ‘12345’에서 대응하는 위치의 문자로 변경하여 반환한다. (‘A’-> 1, ‘B’-> 2, ‘C’-> 3, ‘D’->4, ‘E’-> 5 로 변경)

     

    Oracle Programming
    SELECT TRANSLATE('ABCXYDEFZ', 'ABCDE', '12345') TRANSLATE_FUNC
    FROM   DUAL

     

    Results
    TRANSLATE_FUNC
    ------------------
    123XY45FZ

     

     


    2. Python Pandas(파이썬)

     

    TRANSLATE() 함수

    문자열(‘ABCXYDEFZ’)의 개별 문자를 문자열 ‘ABCDE’에서 검색하여서 존재하면 해당 문자를 문자열 ‘12345’에서 대응하는 위치의 문자로 변경하여 반환한다.

     

    Python Programming
    "ABCXYDEFZ".translate({ord('A'): '1', ord('B'): '2', ord('C'): '3', ord('D'): '4', ord('E'): '5'})

     

    Results
    '123XY45FZ'

     


    string.replace() 함수

    반복문을 사용하여서 문자열(‘ABCXYDEFZ’)의 개별 문자를 문자열 ‘ABCDE’에서 조회하여서 존재하는 경우 ‘12345’에서 대응하는 위치의 문자로 변경하여 반환한다.

     

    Python Programming
    src = ('A','B','C','D','E')
    dst = ('1','2','3','4','5')
    string = 'ABCXYDEFZ'
    for i, j in zip(src, dst):
        string = string.replace(i, j)
    
    string

     

    Results
    '123XY45FZ'

     


    TRANSLATE() 함수

     

    Python Programming
    "ABCXYDEFZ".translate(dict(zip(map(ord,'ABCDE'),map(ord,'12345'))))

     

    Results
    '123XY45FZ'

     


    TRANSLATE() 함수

     

    Python Programming
    emp['ename'].str.translate(dict(zip(map(ord,'ABCDE'),map(ord,'12345')))).head(10)

     

    Results
    0     SMITH
    1     1LL5N
    2      W1R4
    3     JON5S
    4    M1RTIN
    5     2L1K5
    6     3L1RK
    7     S3OTT
    8      KING
    9    TURN5R
    Name: ename, dtype: object

     

     

     


    3. R Programming (R Package)

     

    stringi::stri_replace_all_fixed() 함수

    문자열(‘ABCXYDEFZ’)의 개별 문자를 문자열 ‘ABCDE’ 에서 조회하여 존재하는 경우 ‘12345’에서 대응하는 위치의 문자로 변경하여 반환한다.

     

    R Programming
    %%R
    
    library(stringi)
    
    stringi::stri_replace_all_fixed("ABCXYDEFZ",  c('A', 'B', 'C','D','E'),  c('1', '2', '3','4','5'), vectorize_all = FALSE)

     

    Results
    [1] "123XY45FZ"

     


    Hmisc::translate() 함수

     

    R Programming
    %%R
    
    Hmisc::translate("ABCXYDEFZ","ABCDE", "12345")

     

    Results
    [1] "123XY45FZ"

     


    Hmisc::translate() 함수

     

    R Programming
    %%R
    
    Hmisc::translate(emp$ename,"ABCDE", "12345")

     

    Results
     [1] "SMITH"  "1LL5N"  "W1R4"   "JON5S"  "M1RTIN" "2L1K5"  "3L1RK"  "S3OTT" 
     [9] "KING"   "TURN5R" "141MS"  "J1M5S"  "FOR4"   "MILL5R"

     

     

     


    4. R Dplyr Package

     

    stringi::stri_replace_all_fixed() 함수

    문자열(‘ABCXYDEFZ’)의 개별 문자를 문자열 ‘ABCDE’ 에서 조회하여 존재하는 경우 ‘12345’에서 대응하는 위치의 문자로 변경하여 반환한다. 개별 사원의 이름을 조회하여서 문자(‘A’ ~ ‘E’)에 대응하는 위치의 문자(‘1’~’ 5’)로 변경하여서 반환한다.

     

    R Programming
    %%R
    
    emp %>%
      dplyr::mutate( ename_cng = stringi::stri_replace_all_fixed(ename,  c('A', 'B', 'C','D','E'),  c('1', '2', '3','4','5'), vectorize_all = FALSE) ) %>%
      head()

     

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

     

     

     


    5. R sqldf Package

     

    REPLACE() 함수

     

    R Programming
    %%R
    
    sqldf(" SELECT replace(replace(replace(replace(replace('ABCXYDEFZ', 'A', '1'),'B','2'),'C','3'),'D','4'),'E','5') REPLACE_STR   ")

     

    Results
      REPLACE_STR
    1   123XY45FZ

     


    REPLACE() 함수

    개별 사원의 이름을 조회하여서 문자(‘A’ ~ ‘E’)에 대응하는 위치의 문자(‘1’~’5’)로 변경하여서 반환한다.

     

    R Programming
    %%R
    
    sqldf(" SELECT replace(replace(replace(replace(replace(ename, 'A', '1'),'B','2'),'C','3'),'D','4'),'E','5') REPLACE_STR from emp ")

     

    Results
       REPLACE_STR
    1        SMITH
    2        1LL5N
    3         W1R4
    4        JON5S
    5       M1RTIN
    6        2L1K5
    7        3L1RK
    8        S3OTT
    9         KING
    10      TURN5R
    11       141MS
    12       J1M5S
    13        FOR4
    14      MILL5R

     

     

     


    6. Python pandasql Package

     

    REPLACE() 함수

     

    Python Programming
    ps.sqldf(" SELECT replace(replace(replace(replace(replace('ABCXYDEFZ', 'A', '1'),'B','2'),'C','3'),'D','4'),'E','5') REPLACE_STR ")

     

    Results
    	REPLACE_STR
    0	123XY45FZ
     

     

     


    7. R data.table Package

     

    stringi::stri_replace_all_fixed() 함수

    개별 사원의 이름을 조회하여서 문자(‘A’ ~ ‘E’)에 대응하는 위치의 문자(‘1’~’5’)로 변경하여서 반환한다.

     

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[,ename_cng := stringi::stri_replace_all_fixed(ename,  c('A', 'B', 'C','D','E'),  c('1', '2', '3','4','5'), vectorize_all = FALSE)][1:10, ]

     

    Results
        empno  ename       job  mgr   hiredate  sal comm deptno ename_cng
     1:  7369  SMITH     CLERK 7902 1980-12-17  800   NA     20     SMITH
     2:  7499  ALLEN  SALESMAN 7698 1981-02-20 1600  300     30     1LL5N
     3:  7521   WARD  SALESMAN 7698 1981-02-22 1250  500     30      W1R4
     4:  7566  JONES   MANAGER 7839 1981-04-02 2975   NA     20     JON5S
     5:  7654 MARTIN  SALESMAN 7698 1981-09-28 1250 1400     30    M1RTIN
     6:  7698  BLAKE   MANAGER 7839 1981-03-01 2850   NA     30     2L1K5
     7:  7782  CLARK   MANAGER 7839 1981-01-09 2450   NA     10     3L1RK
     8:  7788  SCOTT   ANALYST 7566 1982-12-09 3000   NA     20     S3OTT
     9:  7839   KING PRESIDENT   NA 1981-11-17 5000   NA     10      KING
    10:  7844 TURNER  SALESMAN 7698 1981-09-08 1500    0     30    TURN5R

     


    8. Python Duckdb의 SQL

     

    Translate() 함수

     

    Python Programming
    %%sql
      SELECT TRANSLATE('ABCXYDEFZ', 'ABCDE', '12345') as TRANSLATE_func

     

    Python Programming
    duckdb.sql(" SELECT TRANSLATE('ABCXYDEFZ', 'ABCDE', '12345') as TRANSLATE_func ").df()

     

    Results
      TRANSLATE_func
    0      123XY45FZ

     


    Replace() 함수

     

    Python Programming
    %%sql
      SELECT replace(replace(replace(replace(replace('ABCXYDEFZ', 'A', '1'),'B','2'),'C','3'),'D','4'),'E','5') REPLACE_STR

     

    Python Programming
    duckdb.sql(" SELECT replace(replace(replace(replace(replace('ABCXYDEFZ', 'A', '1'),'B','2'),'C','3'),'D','4'),'E','5') REPLACE_STR ").df()

     

    Results
      REPLACE_STR
    0   123XY45FZ

     


    Fountain pen on stationery ( https://unsplash.com/photos/hjwKMkehBco )

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

     

     

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

    댓글