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

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

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

포스팅 목차

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


    [ NEXT_DAY Oracle Function ]

     


    NEXT_DAY 함수는 기준일자 이후 돌아오는 명시된 요일에 해당하는 날짜를 반환한다. NEXT_DAY함수는 date 날짜 이후의 char에 의해 정해진 첫 번째 weekdate의 날짜를 반환한다. 반환된 타입은 date의 데이터형에 무관하게 항상 DATE이다. 인수 char은 fullname 또는 생략형중에 하나로 세션의 날짜 언어의 요일일 필요가 있다. 필요한 최소한의 수는 생략형 버전에서 문자의 수이다. 유효한 생략형을 따르는 임의의 문자는 무시된다. 반환되는 값은 인수 date와 같은 시간, 분, 초 요소를 가진다.

     

     

     


    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)

     

    사용자 정의 함수

     

    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

     


    Cheongpung-myeon, Jecheon-si, South Korea (https://unsplash.com/photos/cwkFY4YEuVA)

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

     

     

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

    댓글