본문 바로가기

SQL/LeetCode&HackerRank

[MySQL] DATE_FORMAT 함수로 날짜 형식 변경하기

DATE_FORMAT 함수로 날짜 형식을 바꾸거나 원하는 부분을 가져올 수 있다

 

이 함수의 기본 형태는 다음과 같다

DATE_FORMAT( '형식을 바꿀 날짜', '바꿀 날짜 형식')

 

형식의 종류

1. 연도 year

2. 달 month

3. 일 day

4. 시간 time

5. 요일 weekday

6. 주 week

7. 기호, 단어를 형식과 조합

 

 

아래 예시에서 형식을 바꿀 날짜'2016-09-04 21:15:19'로  datetime 형식(문자형)의 예시 날짜이다

 

바꿀 날짜 형식'%_' 모양을 가지고 있다

형식에 대한 설명은 옆에 주석과 결과에서 확인할 수 있다

1. 연도 year

SELECT '2016-09-04 21:15:19' AS somedate

     -- 연도 year
     , DATE_FORMAT('2016-09-04 21:15:19', '%Y') AS '%Y' -- 'yyyy'
     , DATE_FORMAT('2016-09-04 21:15:19', '%y') AS '%y' -- 'yy'
     
FROM dataset

결과

 

 

2. 달 month

SELECT '2016-09-04 21:15:19' AS somedate

    -- 달 month
    , DATE_FORMAT('2016-09-04 21:15:19', '%M') AS '%M' -- January to December
    , DATE_FORMAT('2016-09-04 21:15:19', '%m') AS '%m' -- 'mm'
    , DATE_FORMAT('2016-09-04 21:15:19', '%b') AS '%b' -- Jan to Dec
    , DATE_FORMAT('2016-09-04 21:15:19', '%c') AS '%c' -- 'm'

FROM dataset

결과

 

 

3. 일 day

SELECT '2016-09-04 21:15:19' AS somedate

    -- 일 day
    , DATE_FORMAT('2016-09-04 21:15:19', '%D') AS '%D' -- 1st to 31st
    , DATE_FORMAT('2016-09-04 21:15:19', '%d') AS '%d' -- 'dd'
    , DATE_FORMAT('2016-09-04 21:15:19', '%e') AS '%e' -- 'd'
    , DATE_FORMAT('2016-09-04 21:15:19', '%j') AS '%j' -- 1 to 365

FROM dataset

결과

 

 

4. 시간 time

SELECT '2016-09-04 21:15:19' AS somedate

    -- 시간 time
    , DATE_FORMAT('2016-09-04 21:15:19', '%H') AS '%H' -- 24H
    , DATE_FORMAT('2016-09-04 21:15:19', '%h') AS '%h' -- 12H
    , DATE_FORMAT('2016-09-04 21:15:19', '%I') AS '%I' -- 12H
    , DATE_FORMAT('2016-09-04 21:15:19', '%i') AS '%i' -- min
    , DATE_FORMAT('2016-09-04 21:15:19', '%S') AS '%S' -- sec
    , DATE_FORMAT('2016-09-04 21:15:19', '%s') AS '%s' -- sec
    , DATE_FORMAT('2016-09-04 21:15:19', '%f') AS '%f' -- microsec
    , DATE_FORMAT('2016-09-04 21:15:19', '%p') AS '%p' -- AM, PM
    , DATE_FORMAT('2016-09-04 21:15:19', '%T') AS '%T' -- 'hh:mm:ss' (24H)
     
FROM dataset

결과

 

 

5. 요일 weekday

SELECT '2016-09-04 21:15:19' AS somedate

     -- 요일 weekday
    , DATE_FORMAT('2016-09-04 21:15:19', '%W') AS '%W' -- Sunday to Saturday
    , DATE_FORMAT('2016-09-04 21:15:19', '%w') AS '%w' -- 0(Sun) to 6(Sat)
    , DATE_FORMAT('2016-09-04 21:15:19', '%a') AS '%a' -- Sun to Sat
 
FROM dataset

결과

 

 

6. 주 week

SELECT '2016-09-04 21:15:19' AS somedate

     -- 주 week 
     -- 일요일에 시작 week starts on Sunday
    , DATE_FORMAT('2016-09-04 21:15:19', '%U') AS '%U' -- 00 to 53
    , DATE_FORMAT('2016-09-04 21:15:19', '%V') AS '%V' -- 01 to 53
    
     -- 월요일에 시작 week starts on Monday
    , DATE_FORMAT('2016-09-04 21:15:19', '%u') AS '%u' -- 00 to 53 
    , DATE_FORMAT('2016-09-04 21:15:19', '%v') AS '%v' -- 01 to 53
     
     -- '%V', '%v'는 '%X', '%x'와 함께 쓰임, 반대도 마찬가지
     
     -- 주에 해당하는 연도 year for the week
    , DATE_FORMAT('2016-09-04 21:15:19', '%X') AS '%X' -- Sun start
    , DATE_FORMAT('2016-09-04 21:15:19', '%x') AS '%x' -- Mon start
     
FROM dataset

결과

 

 

7. 기호, 단어를 형식과 조합

SELECT '2016-09-04 21:15:19' AS somedate

    -- 형식 사이에 기호나 단어를 넣을 수도 있다
    , DATE_FORMAT('2016-09-04 21:15:19', '%d/%m/%y') AS '%d/%m/%y'
    , DATE_FORMAT('2016-09-04 21:15:19', '%c월%e일') AS '%c월%e일'
    , DATE_FORMAT('2016-09-04 21:15:19', '%a-%h-%p') AS '%a-%h-%p'
    -- note: 09시 = 낮/밤 9시
    
FROM dataset

결과

09시 라고 하면 오전 9시 일 것 같은 느낌이 있지만 12H 형식(%h)을 사용했기 때문에 오전/오후 9시 둘 다 09시로 표현된다.

 

note

- '2016-09-04 21:15:19'가 너무 많이 반복 되는데 별칭을 써서 더 간단하게 표현하려면 select 문을 두 번 써야할까?

 

 

참고

[1] https://bramhyun.tistory.com/28