📚 Database

[MySQL] MySQL 날짜 관련 함수 총정리

오늘 ONEUL 2022. 6. 11. 14:14

Date Functions 날짜 관련 함수

 

 

날짜와 시간의 형식화

 

  • DATE_FORMAT(date, format) - 주어진 date를 format에 맞춰 문자열로 반환
SELECT DATE_FORMAT(hiredate, '%Y-%m-%d') FROM emp;
-- YYYY-mm-dd

SELECT DATE_FORMAT(hiredate, '%Y-%m-%d %T') FROM emp;
SELECT DATE_FORMAT(hiredate, '%Y-%m-%d %H:%i:%s') FROM emp;
-- YYYY-mm-dd 00:00:00

 

더보기

형태 설명 예시
%a 요일을 세 개의 문자로 표현함. Sun부터 Sat
%b 월의 축약형을 세 개의 문자로 표현함. Jan부터 Dec
%c 월을 숫자로 표현함. 0부터 12
%D 날짜 뒤에 영어 서수를 붙임 0th, 1st, 2nd, 3rd, ...
%d 날짜를 두 자리 숫자로 표현함. 00부터 31
%e 날짜를 숫자로 표현함. 0부터 31
%f 마이크로초를 여섯 자리 숫자로 표현함. 000000에서 999999
%H 24시간 형식 시간을 두 자리 숫자로 표현함. 00부터 23
%h 12시간 형식 시간을 두 자리 숫자로 표현함. 01부터 12
%I 12시간 형식 시간을 두 자리 숫자로 표현함. 01부터 12
%i 분을 두 자리 숫자로 표현함. 00부터 59
%j 일 년 중 몇 번째 날인지를 세 자리 숫자로 표현함. 001부터 366
%k 24시간 형식으로 시간을 표현함. 0부터 23
%l 12시간 형식으로 시간을 표현함. 1부터 12
%M 월을 완전한 문자열로 표현함. January부터 December
%m 월을 두 자리 숫자로 표현함. 00부터 12
%p 오전과 오후의 대문자를 표현함. AM 또는 PM
%r hh:mm:ss AM/PM 형식으로 시간을 표현함. (12시간 형식) 00:00:01 AM
%S 초를 두 자리 숫자로 표현함. 00부터 59
%s 초를 두 자리 숫자로 표현함. 00부터 59
%T hh:mm:ss 형식으로 시간을 표현함. (24시간 형식) 23:01:01
%U 일 년 중 몇 번째 주인지를 숫자로 표현함. (한 주는 일요일부터 시작함) 00부터 53
%u 일 년 중 몇 번째 주인지를 숫자로 표현함. (한 주는 월요일부터 시작함) 00부터 53
%V 일 년 중 몇 번째 주인지를 숫자로 표현함.
(한 주는 일요일부터 시작하고, %X 형식을 사용함)
00부터 53
%v 일 년 중 몇 번째 주인지를 숫자로 표현함.
(한 주는 월요일부터 시작하고, %x 형식을 사용함)
00부터 53
%W 요일을 완전한 문자열로 표현함. Sunday부터 Saturday
%w 요일을 숫자로 표현함. 0(일요일)부터 6(토요일)
%X 연도를 완전한 네 자리 숫자로 표현함.
(한 주는 일요일부터 시작하고, %V 형식을 사용함)
1999나 2003
%x 연도를 완전한 네 자리 숫자로 표현함.
(한 주는 월요일부터 시작하고, %v 형식을 사용함)
1999나 2003
%Y 연도를 완전한 네 자리 숫자로 표현함. 1999나 2003
%y 연도를 두 자리 숫자로 표현함. 99나 03
%% '%' 문자 %

 

 

 

 

연도별, 월별, 주별 일수

 

  • DAYOFYEAR(date) - 주어진 date의 일자가 해당 연도에서 몇 번째 날인지 반환(1~366)
  • DAYOFMONTH(date) - 주어진 date의 일자가 해당 월에서 몇 번째 날인지 반환(0~31)
  • DAYOFWEEK(date) - 주어진 date의 일자가 해당 주에서 몇 번째 날인지 반환(일요일=1, 토요일=7)

 

 

 

 

특정 날짜와 시간 정보

 

  • DATE(expression) - 주어진 expression에 해당하는 날짜 정보 반환
  • MONTH(date) - 주어진 date에서 월에 해당하는 숫자를 반환(0~12)
  • DAY(date) - 주어진 date에서 일자에 해당하는 숫자를 반환(0~31)
  • HOUR(date) - 주어진 date에서 시간에 해당하는 숫자를 반환(0~23)
  • MINUTE(date) - 주어진 date에서 분에 해당하는 숫자를 반환(0~59)
  • SECOND(date) - 주어진 date에서 초에 해당하는 숫자를 반환(0~59)
  • WEEKDAY(date) - 주어진 date에서 요일에 해당하는 숫자를 반환(월요일=0, 일요일=6)
  • LAST_DAY(date) - 주어진 date에서 해당 월의 마지막 날짜 정보 반환
  • SEC_TO_TIME(seconds) - 주어진 seconds를 기준으로 시간 정보 반환(HH:MM:SS 형식)
SELECT DATE('2022-06-11 12:34:56'),
MONTH('2022-06-11 12:34:56'),
DAY('2022-06-11 12:34:56'),
HOUR('2022-06-11 12:34:56'),
MINUTE('2022-06-11 12:34:56'),
SECOND('2022-06-11 12:34:56');

-- 2022-06-11
-- 6
-- 11
-- 12
-- 34
-- 56

 

  • EXTRACT(part FROM date) - 주어진 date에서 원하는 part에 해당하는 숫자를 반환
더보기

part에 들어갈 수 있는 표현

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR
  • SECOND_MICROSECOND
  • MINUTE_MICROSECOND
  • MINUTE_SECOND
  • HOUR_MICROSECOND
  • HOUR_SECOND
  • HOUR_MINUTE
  • DAY_MICROSECOND
  • DAY_SECOND
  • DAY_MINUTE
  • DAY_HOUR
  • YEAR_MONTH

 

 

 

 

현재 날짜와 시간 정보

 

  • NOW(), CURRENT_TIMESTAMP() - 현재 날짜와 시간 반환
  • CURDATE(), CURRENT_DATE() - 현재 날짜 반환
  • CURTIME(), CURRENT_TIME() - 현재 시각 반환
SELECT NOW(),
CURDATE(),
CURTIME();

-- YYYY-MM-DD HH:MM:SS
-- YYYY-MM-DD
-- HH:MM:SS

 

 

 

 

특정 날짜와 시간 연산

 

  • ADDDATE(date, INTERVAL value addunit) - date에 value addunit 만큼 시간/날짜를 추가한 date를 반환(INTERVAL value addunit 대신 days도 가능)
  • ADDTIEM(datetime, addtime) - datetime에 addtime 만큼 시간을 추가한 datetime을 반환
  • SUBDATE(date, INTERVAL value unit) - date에 value addunit 만큼 시간/날짜를 뺀 date를 반환(INTERVAL value addunit 대신 days도 가능)
  • SUBTIEM(datetime, addtime) - datetime에 addtime 만큼 시간을 뺀 datetime을 반환
SELECT ADDDATE("2022-06-11", INTERVAL 10 DAY),
ADDTIME("2022-06-11 12:34:56", "10 05:05");

-- 2022-06-21
-- 2022-06-21 17:39:56

 

  • PERIOD_ADD(period, number) - 주어진 period에 number만큼 월을 추가한 숫자를 반환(period의 형식은 YYMM 또는 YYYYMM만 가능)

 

 

 

 

특정 날짜나 시간의 차이 연산

 

  • PERIOD_DIFF(period1, period2) - 두 기간의 차이를 숫자로 반환(period의 형식은 YYMM 또는 YYYYMM만 가능, period1과 period2는 같은 형식이어야 함)
  • DATEDIFF(date1, date2) - 두 날짜 사이의 일수를 숫자로 반환(date1 - date2)
  • TIMEDIFF(time1, time2) - 두 시간의 차이를 datetime 형태로 반환(time1 - time2)
SELECT PERIOD_DIFF(202206, 202201);
-- 5

SELECT DATEDIFF(CURDATE(), '2021-06-11');
-- 365

SELECT TIMEDIFF('2022-06-21 12:34:56', '2022-06-11 12:34:56');
-- 240:00:00

 

 

 

 

 

※ 참고자료

http://www.tcpschool.com/mysql/mysql_builtInFunction_dateTime

https://www.w3schools.com/sql/sql_ref_mysql.asp