DATE_FORMAT 함수로 날짜 형식을 바꾸거나 원하는 부분을 가져올 수 있다
이 함수의 기본 형태는 다음과 같다
DATE_FORMAT( '형식을 바꿀 날짜', '바꿀 날짜 형식')
형식의 종류
아래 예시에서 형식을 바꿀 날짜는 '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 문을 두 번 써야할까?
참고
'SQL > LeetCode&HackerRank' 카테고리의 다른 글
[MySQL] HackerRank - Challenges 풀이 (0) | 2023.03.23 |
---|---|
[MySQL] LeetCode 184 - 서브쿼리와 이너 조인 활용하기 (0) | 2023.01.05 |
[MySQL] HackerRank - Top Earners 풀이 3가지 (0) | 2023.01.04 |
[MySQL] Leetcode 196 - DELETE문을 사용하여 중복값 삭제하기 (1) | 2022.12.21 |
[MySQL] Leetcode 627 - UDATE문을 사용하여 성별 전환하기 (0) | 2022.12.19 |