본문으로 바로가기

[SQL] 13. 날짜와 시간 다루기 (DATE)

category Skills/SQL 2021. 8. 5. 13:38
반응형
날짜와 시간 데이터 타입
DATE 2021-08-05
TIME 11:33:28
DATETIME 2021-08-05 11:33:28
TIMESTAMP 2021-08-05 11:33:28 UTC

*UTC : 시간대(타임존)

 

문자를 날짜로 바꿔보자
  • 데이터 전처리 단계에서 수행하게 됨

'YYYY-MM-DD' 형식이라면

DATE(컬럼명)

그 외의 형식이라면

PARSE_DATE(날짜형태, 컬럼명)

기본 형식이 아닌 경우 컴퓨터가 어떤 것이 연도,월,일인지 구분하지 못함

SELECT
    DATE('2021-08-05')
  , PARSE_DATE('%Y%m%d', '20210805')
  , PARSE_DATE('%Y/%m/%d', '2021/08/05')
  , PARSE_DATE('%Y.%m.%d', '21.08.05')
  , PARSE_DATE('%Y-%m/%d', '21-AUG/05')
  , PARSE_DATE('%Y%B%d', '2021AUGUST05')
SELECT last_review, PARSE_DATE('%Y.%m.%d', last_review) AS parse_last_review
FROM data.airbnb_nyc

 

날짜 포맷 규칙
연도 2021 %Y
21 %y
08 %m
AUGUST %B
AUG %b
05 %d

날짜에서 원하는 정보만 뽑아보자
EXTRACT (원하는정보 FROM 컬럼명)

원하는정보

  • YEAR
  • MONTH
  • DAY
  • DAYOFWEEK
    • 일요일부터 토요일까지 1~7
  • WEEK
    • 0~53
    • 주의 시작은 일요일
    • 첫째 주에 일요일이 없으면 0주차
    • 업무 시 주차 별 비교나 주차 별 매출을 구할 경우 다수
  • WEEK(MONDAY)
    • 주의 시작 요일을 바꾸고 싶을 때
    • WEEK(요일) : 괄호 안의 요일에 따라 일주일의 시작 요일이 달라짐
  • QUARTER
SELECT rental_date,
       EXTRACT(YEAR FROM rental_date) AS rental_year
FROM data.bike_sharing
SELECT DISTINCT rental_date,
       EXTRACT(YEAR FROM rental_date) AS rental_year
FROM data.bike_sharing
SELECT rental_date,
       EXTRACT(YEAR FROM rental_date) AS rental_year,
       EXTRACT(MONTH FROM rental_date) AS rental_month,
	   EXTRACT(DAYOFWEEK FROM rental_date) AS rental_dow,
	   EXTRACT(WEEK FROM rental_date) AS rental_week,
 	   EXTRACT(WEEK(MONDAY) FROM rental_date) AS rantal_week_monday
FROM data.bike_sharing
  • 일자, 분기도 가능

날짜에 일정 기간을 더하고 빼자
  • 기간을 더할 때
DATE_ADD (컬럼명, INTERVAL 기간)
  • 기간을 뺄 때
DATE_SUB (컬럼명, INTERVAL 기간)
  • 기간
    • 1 YEAR
    • 6 MONTH
    • 7 DAY
    • 2 WEEK
    • 3 QUARTER...
SELECT rental_date,
       DATE_ADD(rental_date, INTERVAL 5 DAY) AS rental_date_5day,
       DATE_SUB(rental_date, INTERVAL 1 week) AS rental_date_1week_ago
FROM data.bike_sharing

두 날짜 사이의 차이를 구해보자
DATE_DIFF (컬럼명1, 컬럼명2, 단위)
  • 컬럼명 1 > 컬럼명 2 : 컬럼명 1이 컬럼명 2보다 최근 일자여야 한다
  • 단위
    • YEAR
    • MONTH
    • DAY
    • WEEK
    • WEEK(MONDAY)
    • QUARTER
SELECT rental_date,
       DATE_DIFF(DATE('2021-08-05'), rental_date, YEAR) AS diff_year,
       DATE_DIFF(DATE('2021-08-05'), rental_date, WEEK) AS diff_week
FROM data.bike_sharing
  • DATETIME_DIFF도 같은 방식으로 작동한다
반응형