포스팅 목차
* 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
[ TRANSLATE Oracle Function ]
TRANSLATE 함수는 문자열 expr의 개별 문자를 체크하여서 from_string에 존재하면 해당 문자를 to_string에서 대응하는 위치의 문자로 치환하여 expr을 반환한다. from_string 안에 존재하지 않는 expr안의 문자는 치환되지 않는다. 만약 expr이 문자열이라면, 홑 따옴표로 둘러쌓여야 한다. 인수 from_string는 to_string보다 더 많은 문자를 가질 수 있다. 이 경우에, from_string의 마지막에 있는 여분의 문자는 to_string안에 상응하는 문자가 없다. 만약 이 여분의 문자가 char안에 있는 경우, 그러한 문자는 반환 값으로부터 삭제된다.
- 함수 설명 : TRANSLATE 오라클 함수 링크
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
--------------------------------------------
[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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크 |
댓글