포스팅 목차
* 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
[ NEXT_DAY Oracle Function ]
NEXT_DAY 함수는 기준일자 이후 돌아오는 명시된 요일에 해당하는 날짜를 반환한다. NEXT_DAY함수는 date 날짜 이후의 char에 의해 정해진 첫 번째 weekdate의 날짜를 반환한다. 반환된 타입은 date의 데이터형에 무관하게 항상 DATE이다. 인수 char은 fullname 또는 생략형중에 하나로 세션의 날짜 언어의 요일일 필요가 있다. 필요한 최소한의 수는 생략형 버전에서 문자의 수이다. 유효한 생략형을 따르는 임의의 문자는 무시된다. 반환되는 값은 인수 date와 같은 시간, 분, 초 요소를 가진다.
- 함수 설명 : NEXT_DAY 오라클 함수 링크
1. Oracle(오라클)
Next_day() 함수
Oracle Programming |
SELECT NEXT_DAY('15-OCT-2009','TUESDAY') "NEXT DAY"
FROM DUAL;
Results |
NEXT DAY
--------------------------
20-OCT-2009 00:00:00
2. Python Pandas(파이썬)
relativedelta() 함수
오늘 날짜 이후 1주일 뒤의 날짜를 반환한다.
Python Programming |
from datetime import datetime
from dateutil.relativedelta import relativedelta
datetime.now().date() + relativedelta(weeks=+1)
Results |
datetime.date(2021, 2, 12)
Relativedelta() 함수
2020년 12월 3일 이후 돌아오는 토요일(‘5’)의 날짜를 반환한다.
Python Programming |
from dateutil import relativedelta
import datetime
datetime.datetime.strptime('2020-12-03', '%Y-%m-%d') + relativedelta.relativedelta(weekday=5) # 5 is 토요일
Results |
datetime.datetime(2020, 12, 5, 0, 0)
Relativedelta() 함수
2020년 12월 3일 이후 돌아오는 토요일(‘5’)의 날짜를 반환한다.
Python Programming |
import datetime
import dateutil.relativedelta as REL
base_date = datetime.datetime.strptime('2020-12-03', '%Y-%m-%d')
next_week = REL.relativedelta(days=1, weekday=REL.SA) # MO, TU
next_SAday = base_date + next_week
print(next_SAday)
Results |
2020-12-05 00:00:00
datetime.timedelta() 함수
2020년 12월 3일 이후 차주 토요일(‘5’)의 날짜를 반환한다.
Python Programming |
import datetime
base_date = datetime.datetime.strptime('2020-12-03', '%Y-%m-%d')
print(base_date)
base_date + datetime.timedelta(base_date.weekday()+6) # 차주 토요일
Results |
2020-12-03 00:00:00
datetime.datetime(2020, 12, 12, 0, 0)
3. R Programming (R Package)
- string Vs Base 함수 : https://stringr.tidyverse.org/articles/from-base.html
사용자 정의 함수
R Programming |
%%R
next_day <- function(x,day){
for(y in 1:7) {
check_date = as.Date(x+days(y) ) #우리가 입력한 날짜에 y숫자를 더함!
if(format(check_date, '%A')==day) {
print(check_date) }
}
}
next_day(as.Date('2020-12-3'), '토요일')
Results |
[1] "2020-12-05"
lubridate::wday() 함수
R Programming |
%%R
next_day <- function(d, w) {
d + (seq(w - 1, length = 7) %% 7 + 1L)[8 - lubridate::wday(d)]
}
next_day(as.Date('2020-12-3'), 7) # 7 : 토요일
Results |
[1] "2020-12-05"
month() 와 days() 함수
: https://5hourscoding.tistory.com/187
R Programming |
%%R
library(lubridate)
add <- 6 - as.numeric(format(as.Date('2020-12-3') + months(0),'%w'))
as.Date(Sys.Date()) + months(0) + days(add)
Results |
[1] "2021-02-07"
4. R Dplyr Package
5. R sqldf Package
R Programming |
%%R
sqldf("select CASE WHEN strftime('%w', DATE('2020-12-03')) = '0' THEN 'SUN' \
WHEN strftime('%w', DATE('2020-12-03')) = '1' THEN 'MON' \
WHEN strftime('%w', DATE('2020-12-03')) = '2' THEN 'TUE' \
WHEN strftime('%w', DATE('2020-12-03')) = '3' THEN 'WEN' \
WHEN strftime('%w', DATE('2020-12-03')) = '4' THEN 'THU' \
WHEN strftime('%w', DATE('2020-12-03')) = '5' THEN 'FRI' \
WHEN strftime('%w', DATE('2020-12-03')) = '6' THEN 'SAT' END WEEK_REF, \
DATE('2020-12-03', ( '6' - strftime('%w', DATE('2020-12-03')) + \
CASE WHEN strftime('%w', DATE('2020-12-03')) < '6' THEN 0 ELSE 7 END) || ' day') Next_SAT")
Results |
WEEK_REF Next_SAT
1 THU 2020-12-05
6. Python pandasql Package
- 6 : 토요일
Python Programming |
ps.sqldf("select CASE WHEN strftime('%w', DATE('2020-12-03')) = '0' THEN '일요일' \
WHEN strftime('%w', DATE('2020-12-03')) = '1' THEN '월요일' \
WHEN strftime('%w', DATE('2020-12-03')) = '2' THEN '화요일' \
WHEN strftime('%w', DATE('2020-12-03')) = '3' THEN '수요일' \
WHEN strftime('%w', DATE('2020-12-03')) = '4' THEN '목요일' \
WHEN strftime('%w', DATE('2020-12-03')) = '5' THEN '금요일' \
WHEN strftime('%w', DATE('2020-12-03')) = '6' THEN '토요일' \
WHEN strftime('%w', DATE('2020-12-03')) = '7' THEN '일요일' END 요일_참고용,\
DATE('2020-12-03', ( '6' - strftime('%w', DATE('2020-12-03')) + \
CASE WHEN strftime('%w', DATE('2020-12-03')) < '6' THEN 0 ELSE 7 END) || ' day') Next_토요일 ")
Results |
요일_참고용 Next_토요일
0 목요일 2020-12-05
7. R data.table Package
8. Python Duckdb의 SQL
Python Programming |
%%sql
select CASE WHEN strftime('%w', DATE '2020-12-03') = '0' THEN '일요일'
WHEN strftime('%w', DATE '2020-12-03') = '1' THEN '월요일'
WHEN strftime('%w', DATE '2020-12-03') = '2' THEN '화요일'
WHEN strftime('%w', DATE '2020-12-03') = '3' THEN '수요일'
WHEN strftime('%w', DATE '2020-12-03') = '4' THEN '목요일'
WHEN strftime('%w', DATE '2020-12-03') = '5' THEN '금요일'
WHEN strftime('%w', DATE '2020-12-03') = '6' THEN '토요일'
WHEN strftime('%w', DATE '2020-12-03') = '7' THEN '일요일' END 요일_참고용,
DATE '2020-12-03' + INTERVAL ( ( 6 - cast (strftime('%w', DATE '2020-12-03' ) as integer) +
CASE WHEN strftime('%w', DATE '2020-12-03') < '6' THEN 0 ELSE 7 END ) || 'day' ) Next_토요일
Python Programming |
duckdb.sql(" select CASE WHEN strftime('%w', DATE '2020-12-03') = '0' THEN '일요일' \
WHEN strftime('%w', DATE '2020-12-03') = '1' THEN '월요일' \
WHEN strftime('%w', DATE '2020-12-03') = '2' THEN '화요일' \
WHEN strftime('%w', DATE '2020-12-03') = '3' THEN '수요일' \
WHEN strftime('%w', DATE '2020-12-03') = '4' THEN '목요일' \
WHEN strftime('%w', DATE '2020-12-03') = '5' THEN '금요일' \
WHEN strftime('%w', DATE '2020-12-03') = '6' THEN '토요일' \
WHEN strftime('%w', DATE '2020-12-03') = '7' THEN '일요일' END 요일_참고용, \
DATE '2020-12-03' + INTERVAL ( ( 6 - cast (strftime('%w', DATE '2020-12-03' ) as integer) + \
CASE WHEN strftime('%w', DATE '2020-12-03') < '6' THEN 0 ELSE 7 END ) || 'day' ").df()
Results |
요일_참고용 Next_토요일
0 목요일 2020-12-05
--------------------------------------------
[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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크 |
반응형
댓글