날짜와 시간 함수

Redshift 입문

Jason Myers

Principal Architect

현재 날짜와 시간 가져오기

  • SYSDATE 트랜잭션 시작 시점의 날짜와 시간
-- 현재 날짜와 시간 조회
SELECT SYSDATE;
timestamp
============================
2024-01-27 20:05:55.976353
  • GETDATE() 문장 시작 시점의 날짜와 시간, 괄호 필요
-- 현재 날짜와 시간 조회
SELECT GETDATE();
timestamp
============================
2024-01-27 20:06:55.976353
Redshift 입문

날짜/시간 함수 동작

리더 노드 전용 함수에 유의하세요!

  • AGE보다 DATEDIFF 사용
  • 리더 전용 함수 대신 GETDATE/SYSDATE 사용:
    • CURRENT_TIME
    • CURRENT_TIMESTAMP
    • ISFINITE
    • LOCALTIME
    • LOCALTIMESTAMP
    • NOW
Redshift 입문

날짜와 시간 절단하기

  • TRUNC은 타임스탬프에서 날짜를 반환
-- 기준 SYSDATE: 2024-01-27 20:05:55.976353
-- 현재 날짜 조회
SELECT TRUNC(SYSDATE);
2024-01-27
  • DATE_TRUNC('datepart', timestamp)는 hour, day 등의 datepart로 자름
-- 기준 SYSDATE: 2024-01-27 20:05:55.976353
-- minute로 절단
SELECT DATE_TRUNC('minute', SYSDATE);
2024-01-27 20:05:55
1 https://docs.aws.amazon.com/redshift/latest/dg/r_Dateparts_for_datetime_functions.html
Redshift 입문

날짜/타임스탬프의 부분 추출

  • DATE_PART(datepart, date or timestamp)
    • 날짜/타임스탬프에서 지정한 부분 추출
-- 기준 SYSDATE: 2024-01-27 20:05:55.976353
-- 현재 월 가져오기
SELECT DATE_PART(month, SYSDATE);
1
  • month, day, year 외도 반환 가능
    • 예: dayofweek, quarter, timezone
-- 기준 SYSDATE: 2024-01-27 20:05:55.976353
-- 요일 번호 가져오기
SELECT DATE_PART(dayofweek, SYSDATE);
6
Redshift 입문

날짜와 시간 비교

  • DATE_CMP(date_1, date_2) 상대 비교

    • date_1이 더 이르면 -1 반환
    • 같으면 0 반환
    • date_1이 더 늦으면 1 반환
  • 타입별 전용 함수

    • DATE_CMP_TIMESTAMP
    • DATE_CMP_TIMESTAMPTZ
    • TIMESTAMP_CMP
    • TIMESTAMP_CMP_TIMESTAMPTZ
    • TIMESTAMPTZ_CMP
-- SYSDATE: 2024-01-27 20:05:55.976353 기준으로
-- 테이블의 5개 날짜를 비교
  SELECT date_col, 
         TRUNC(SYSDATE) AS current_date,
         DATE_CMP(date_col, SYSDATE)
    FROM combined_history_projections
ORDER BY date_col
   LIMIT 3;
 date_col  |  current_date | date_cmp
===========|===============|==========
2024-01-26 | 2024-01-27    |       -1
2024-01-27 | 2024-01-27    |        0
2024-01-28 | 2024-01-27    |        1
Redshift 입문

차이 계산하기

  • DATEDIFF(datepart, value_1, value_2)
  • 양쪽에 date, time, timetz, timestamp 지원
    • datepart를 포함해야 함
  • 반환값
    • value_2가 더 이르면 음수
    • 같으면 0
    • value_2가 더 늦으면 양수
Redshift 입문

DATEDIFF 사용

-- 1분기 말까지 남은 일수 (기준 SYSDATE: 2024-01-27 20:05:55.976353)
SELECT DATEDIFF(day,TRUNC(SYSDATE),'2024-03-31') AS days_diff;

days_diff =========== 64
Redshift 입문

날짜와 시간 증가시키기

  • DATEADD(datepart, quantity, value)
  • date, time, timetz, timestamp 지원
  • quantity가 음수면 빼기
-- 기준 SYSDATE: 2024-01-27 20:05:55.976353
-- 날짜에 1주 추가
SELECT TRUNC(SYSDATE) AS todays_date,
       TRUNC(DATEADD(week, 1, SYSDATE)) AS next_weeks_date;
todays_date | next_weeks_date
============|==================
2024-01-27  | 2024-02-03
Redshift 입문

날짜/시간 증가 시 주의점

  • 윤년: month 단위 증가는 해당 월 말일 반환
-- 월 단위로 1년 추가
SELECT DATEADD(month, 12, '2024-02-29');
2025-02-28 00:00:00
  • 윤년: year 단위 증가는 다음 날 반환
-- 연 단위로 1년 추가
SELECT DATEADD(year, 1, '2024-02-29');
2025-03-01 00:00:00
Redshift 입문

Ayo berlatih!

Redshift 입문

Preparing Video For Download...