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

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

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

포스팅 목차

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


    [ TO_DATE Oracle Function ]

     


    TO_DATE함수는 문자형 데이터 값(문자형으로 지정된 날짜 데이터)을 사용자가 지정한 날짜형 데이터 타입 값으로 변환한다. fmt는 char의 포맷을 지정하기 위한 날짜형 형식의 포맷이다. 만약 fmt를 생략하면, char은 기본적으로 날짜 포맷이다. 만약 fmt가 J(Julian)라면, char은 정수일 필요가 있다.

     

     


    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

     


     

    ( https://unsplash.com/photos/zy53Nc0VE7A )

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

     

     

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

    댓글