포스팅 목차
* 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
[ TO_DATE Oracle Function ]
TO_DATE함수는 문자형 데이터 값(문자형으로 지정된 날짜 데이터)을 사용자가 지정한 날짜형 데이터 타입 값으로 변환한다. fmt는 char의 포맷을 지정하기 위한 날짜형 형식의 포맷이다. 만약 fmt를 생략하면, char은 기본적으로 날짜 포맷이다. 만약 fmt가 J(Julian)라면, char은 정수일 필요가 있다.
- 함수 설명 : TO_DATE 오라클 함수 링크
1. Oracle(오라클)
TO_DATE() 함수
Oracle Programming |
SELECT TO_DATE('30/1/2020', 'DD/MM/YYYY') TO_DATE_VAR
FROM DUAL;
Results |
TO_DATE_VAR
-------------------------
30-JAN-2020 00:00:00
2. Python Pandas(파이썬)
datetime.datetime
Python Programming |
import datetime
datetime.datetime.strptime('30-01-20', '%d-%m-%y').date()
Results |
datetime.date(2020, 1, 30)
dateutil.parse 함수
dateutil.parse 함수를 사용하여서 문자로 지정한 날짜 데이터를 날짜형 데이터 값으로 변환한다.
Python Programming |
from dateutil.parser import parse
parse("2020-02-24T13:00:00-08:00")
Results |
datetime.datetime(2020, 2, 24, 13, 0, tzinfo=tzoffset(None, -28800))
DATE() 함수
Python Programming |
import arrow
import datetime
arrow.get('24052020', 'DMYYYY').date()
Results |
datetime.date(2020, 5, 24)
relativedelta.relativedelta(months=12)
Python Programming |
from dateutil import relativedelta
import datetime
datetime.datetime.strptime('2020-12-03', '%Y-%m-%d') + relativedelta.relativedelta(months=12) # 5 is 토요일
Results |
datetime.datetime(2021, 12, 3, 0, 0)
pd.to_datetime() 함수
Python Programming |
withmooc = copy.copy(emp)
import datetime
withmooc['date_change'] = pd.to_datetime(withmooc['hiredate'], format='%Y %m %d') # datetime 형태
withmooc['date_char'] = withmooc.date_change.astype(str) # 문자형
withmooc['date_char_1'] = withmooc.date_change.dt.strftime('%Y-%m-%d') # 문자형
print(withmooc['date_change'].dtype)
print(withmooc['date_char'].dtype)
print(withmooc['date_char_1'].dtype)
# withmooc.info()
datetime64[ns]
object
object
[참고] datetime.now() : 현재 날짜를 문자열로 변환하여 출력한다.
Python Programming |
from datetime import datetime
datetime.now().strftime('%Y-%m-%d')
'2021-02-14'
3. R Programming (R Package)
as.Date()
R Programming |
%%R
as.Date('2020-12-3', format='%Y-%m-%d')
Results |
[1] "2020-12-03"
as.Date()와 months(0)
현재 일자를 기준으로 2일이 경과된 날짜를 출력한다.
R Programming |
%%R
library(lubridate)
to
add <- 6 - as.numeric(format(as.Date('2020-12-3') + months(0),'%w'))
print(add)
as.Date(Sys.Date()) + months(0) + days(add)
Results |
[1] 2
[1] "2021-02-16"
lubridate::parse_date_time 함수
lubridate::parse_date_time 함수를 사용하여서 문자로 지정한 날짜 데이터를 날짜/시간형 데이터 값으로 변환한다.
R Programming |
%%R
library(lubridate)
lubridate::parse_date_time('2016-08-30 12:54:12',"Ymd HMS")
Results |
[1] "2016-08-30 12:54:12 UTC"
lubridate::ymd_hms 함수
lubridate::ymd_hms 함수를 사용하여서 문자로 지정한 날짜 데이터를 날짜/시간 데이터를 생성한다.
R Programming |
%%R
library(lubridate)
lubridate::ymd_hms('2016-08-30 12:54:12')
Results |
[1] "2016-08-30 12:54:12 UTC"
as.Date 함수
as.Date 함수를 사용하여서 날짜형 변수를 생성하고, as.character 함수를 사용하여서 문자형 변수를 생성한다.
R Programming |
%%R
withmooc<-emp
withmooc['date_change'] = as.Date(withmooc$hiredate)
withmooc['date_char'] = as.character(withmooc$date_change)
withmooc[1:10,-c(1,2,3)]
Results |
# A tibble: 10 x 7
mgr hiredate sal comm deptno date_change date_char
<dbl> <date> <dbl> <dbl> <dbl> <date> <chr>
1 7902 1980-12-17 800 NA 20 1980-12-17 1980-12-17
2 7698 1981-02-20 1600 300 30 1981-02-20 1981-02-20
3 7698 1981-02-22 1250 500 30 1981-02-22 1981-02-22
4 7839 1981-04-02 2975 NA 20 1981-04-02 1981-04-02
5 7698 1981-09-28 1250 1400 30 1981-09-28 1981-09-28
6 7839 1981-03-01 2850 NA 30 1981-03-01 1981-03-01
7 7839 1981-01-09 2450 NA 10 1981-01-09 1981-01-09
8 7566 1982-12-09 3000 NA 20 1982-12-09 1982-12-09
9 NA 1981-11-17 5000 NA 10 1981-11-17 1981-11-17
10 7698 1981-09-08 1500 0 30 1981-09-08 1981-09-08
4. R Dplyr Package
as.character 함수
as.character 함수를 사용하여서 문자형 변수를 생성하고, as.Date 함수를 사용하여서 날짜형 변수를 생성한다.
R Programming |
%%R
withmooc <- emp
withmooc %>%
dplyr::mutate(date_char = as.character(hiredate),
date_change = as.Date(date_char)) %>%
dplyr::select(-job) %>%
head()
Results |
# A tibble: 6 x 9
empno ename mgr hiredate sal comm deptno date_char date_change
<dbl> <chr> <dbl> <date> <dbl> <dbl> <dbl> <chr> <date>
1 7369 SMITH 7902 1980-12-17 800 NA 20 1980-12-17 1980-12-17
2 7499 ALLEN 7698 1981-02-20 1600 300 30 1981-02-20 1981-02-20
3 7521 WARD 7698 1981-02-22 1250 500 30 1981-02-22 1981-02-22
4 7566 JONES 7839 1981-04-02 2975 NA 20 1981-04-02 1981-04-02
5 7654 MARTIN 7698 1981-09-28 1250 1400 30 1981-09-28 1981-09-28
6 7698 BLAKE 7839 1981-03-01 2850 NA 30 1981-03-01 1981-03-01
5. R sqldf Package
date 함수
date 함수를 사용하여서 문자로 지정한 날짜 데이터를 날짜/시간 데이터를 생성한다. 날짜형 데이터로 변환된 기준일자에서 11개월 경과한 월의 마지막 일자를 반환한다.
R Programming |
%%R
sqldf(" SELECT date('2016-08-30 12:54:12') to_date,
date(date('2016-08-30 12:54:12'),'start of month','+12 month','-1 day') to_date_1")
Results |
to_date to_date_1
1 2016-08-30 2017-07-31
6. Python pandasql Package
date 함수
Oracle Programming |
ps.sqldf(" SELECT date('2016-08-30 12:54:12') to_date, \
date(date('2016-08-30 12:54:12'),'start of month','+12 month','-1 day') to_date_1 ")
Results |
to_date to_date_1
0 2016-08-30 2017-07-31
7. R data.table Package
as.character 함수
as.character 함수를 사용하여서 문자형 변수를 생성하고, as.Date 함수를 사용하여서 날짜형 변수를 생성한다.
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[,`:=`(date_char = as.character(hiredate),
date_change = as.Date(as.character(hiredate)) ) ]
# str(DT)
Results |
Classes 'data.table' and 'data.frame': 14 obs. of 10 variables:
$ empno : num 7369 7499 7521 7566 7654 ...
$ ename : chr "SMITH" "ALLEN" "WARD" "JONES" ...
$ job : chr "CLERK" "SALESMAN" "SALESMAN" "MANAGER" ...
$ mgr : num 7902 7698 7698 7839 7698 ...
$ hiredate : Date, format: "1980-12-17" "1981-02-20" ...
$ sal : num 800 1600 1250 2975 1250 ...
$ comm : num NA 300 500 NA 1400 NA NA NA NA 0 ...
$ deptno : num 20 30 30 20 30 30 10 20 10 30 ...
$ date_char : chr "1980-12-17" "1981-02-20" "1981-02-22" "1981-04-02" ...
$ date_change: Date, format: "1980-12-17" "1981-02-20" ...
- attr(*, ".internal.selfref")=<externalptr>
8. Python Duckdb의 SQL
Python Programming |
%%sql
SELECT strftime(DATE '1992-03-02', '%d/%m/%Y') as Date_func
Python Programming |
duckdb.sql(" SELECT strftime(DATE '1992-03-02', '%d/%m/%Y') as Date_func ").df()
Results |
Date_func
0 02/03/1992
Python Programming |
%%sql
SELECT TIMESTAMP '2016-08-30 12:54:12' to_date_1,
date_trunc('month', DATE '2016-08-30 12:54:12') + INTERVAL 12 MONTH - INTERVAL 1 DAY AS TO_DATE_2
Python Programming |
duckdb.sql(" SELECT TIMESTAMP '2016-08-30 12:54:12' to_date_1, \
date_trunc('month', DATE '2016-08-30 12:54:12') + INTERVAL 12 MONTH - INTERVAL 1 DAY AS TO_DATE_2 ").df()
Results |
to_date_1 TO_DATE_2
0 2016-08-30 12:54:12 2017-07-31
Python Programming |
%%sql
select TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 YEAR AS YY,
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 MONTH AS MM,
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 50 DAY AS DD,
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 HOUR AS HH,
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 MINUTE AS MI,
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 SECOND AS SE,
Python Programming |
duckdb.sql(" select TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 YEAR AS YY, \
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 MONTH AS MM, \
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 50 DAY AS DD, \
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 HOUR AS HH, \
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 MINUTE AS MI, \
TIMESTAMP '2020-03-20 01:00:00.0' + INTERVAL 2 SECOND AS SE ").df()
Results |
YY MM DD \
0 2022-03-20 01:00:00 2020-05-20 01:00:00 2020-05-09 01:00:00
HH MI SE
0 2020-03-20 03:00:00 2020-03-20 01:02:00 2020-03-20 01:00:02
Python Programming |
%%sql
select strftime(timestamp '2020-03-20 01:00:00.0' - INTERVAL 50 DAY + INTERVAL 10 HOUR + INTERVAL 30 SECOND , '%Y-%m-%d %I:%M:%S') add_time
Python Programming |
duckdb.sql(" select strftime(timestamp '2020-03-20 01:00:00.0' - INTERVAL 50 DAY + INTERVAL 10 HOUR + INTERVAL 30 SECOND , '%Y-%m-%d %I:%M:%S') add_time ").df()
Results |
add_time
0 2020-01-30 11:00:30
--------------------------------------------
[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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크 |
댓글