[MySQL/DB] 날짜, 시간관련 함수DB2023. 1. 8. 11:00
Table of Contents
728x90
728x90
날짜, 시간관련 함수
함수 | 설명 |
CURDATE CURRENT_DATE |
YYYY-MM-DD |
CURTIME CURRENT_TIME |
HH:mm:SS |
NOW CURRENT_TIMESTAMP |
YYYY-MM-DD HH:mm:SS |
DAYNAME | 해당 날짜의 요일 이름을 영어로 리턴 |
MONTHNAME | 해당 월의 요일 이름을 영어로 리턴 |
DAY | 몇 일인지 리턴 |
MONTH | 몇 월인지 리턴 (1 ~ 12) |
YEAR | 년도를 리턴한다 (1000 ~ 9999) |
DAYOFWEEK | 한 주의 몇 번째 일인지 리턴 (일요일 : 1 ~ 토요일 : 7) |
DAYOFMONTH | 한 달의 몇 번째 일인지 리턴 |
DAYOFYEAR | 한 해의 몇 번째 일인지 리턴 |
WEEKOFYEAR | 한 해의 몇번 째 주인지 리턴 |
YEARWEEK | YYYY와 한 해의 몇번 째 주인지 리턴 |
LAST_DAY | 해당 월의 마지막 날짜 |
QUARTER | 분기를 리턴 |
PERIOD_ADD(X, N) | X에 N개월을 더한다. X는 YYMM, YYYYMM형식 리턴값은 YYYYMM형식 |
PERIOD_DIFF(X, Y) | X와 Y사이의 개월 수 리턴 |
DATE_ADD(X, INTERVAL N TYPE) ADDDATE(X, N) |
X에서 N만큼을 더한다. (TYPE : 시간 단위 - SECOND, DAY 등) |
DATE_SUB(X, INTERVAL N TYPE) SUBDATE(X, N) |
X에서 N만큼을 뺀다. (TYPE : 시간 단위 - SECOND, DAY 등) |
EXTRACT | 지정한 값만 추출한다 |
DATE_FORMAT | 지정 형식으로 날짜를 출력 |
SYSDATE | SYSDATE는 연산할 때 마다의 기준으로 현재 시간을 나타낸다. (NOW는 쿼리가 시작되는 시간이 고정이다) |
-- 현재의 시간 정보들
SELECT CURDATE(), CURTIME(), NOW();
SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;
결과 : 2023-01-08 / 11:02:09 / 2023-01-08 11:02:09
SELECT DAYNAME(CURDATE());
결과 : Sunday
SELECT MONTHNAME(CURDATE());
결과 : January
SELECT DAY(CURDATE());
SELECT MONTH(CURDATE());
SELECT YEAR(CURDATE());
결과 : 8 / 1 / 2023
SELECT DAYOFWEEK(CURDATE());
SELECT DAYOFMONTH('2022-02-22');
SELECT DAYOFYEAR('2023-03-03');
SELECT WEEKOFYEAR('2024-04-04');
결과 : 1 / 22 / 62 / 14
SELECT YEARWEEK('2023-05-05');
결과 : 202318
SELECT LAST_DAY('2023-06-06');
SELECT QUARTER('2023-07-07');
결과 : 2023-06-30 / 3
SELECT PERIOD_ADD('202308', 13);
SELECT PERIOD_DIFF('202308', '202408');
결과 : 202409 / -12
-- ADDDATE는 INTERVAL을 붙여 사용도 가능하다
SELECT DATE_ADD(CURDATE(), INTERVAL 111 DAY);
SELECT DATE_ADD(CURDATE(), INTERVAL 111 MONTH);
SELECT DATE_ADD(CURDATE(), INTERVAL 111 YEAR);
결과 : 2023-04-29 / 2032-04-08 / 2134-01-08
SELECT ADDDATE(CURDATE(), 5);
SELECT ADDDATE(CURDATE(), INTERVAL 5 YEAR);
결과 : 2023-01-13 / 2028-01-08
-- SUB : 기존 ADD에 -만 붙여서 사용도 가능하다
SELECT DATE_SUB(CURDATE(), INTERVAL 111 DAY);
SELECT DATE_ADD(CURDATE(), INTERVAL -111 DAY);
결과 : 2022-09-19로 동일
-- EXTRACT의 날짜 요소 값
-- YEAR, MONTH, QUARTER, WEEK, DAY, HOUR, MINUTE, SECOND, YEAR_MONTH, DAY_HOUR
-- DAY_MINUTE, DAY_SECOND, HOUR_MINUTE, HOUR_SECOND, MINUTE_SECOND 등
SELECT EXTRACT(YEAR_MONTH FROM CURDATE());
SELECT EXTRACT(QUARTER FROM CURDATE());
SELECT EXTRACT(MINUTE_SECOND FROM NOW());
결과 : 202301 / 1 / 2215
SELECT DATE_FORMAT('2222-02-22', '%u %W %j');
결과 : 08 Friday 053
DATE_FORMAT 구분 기호
FORMAT | 역할 | FORMAT | 역할 |
%Y | YYYY | %d | DD |
%y | YY | %e | DD(1~9일은 D) |
%M | 긴 월 이름(ex : February) | %I | HH(12시간 기준) |
%b | 짧은 월 이름(ex : Feb) | %H | HH(24시간 기준) |
%W | 긴 요일 이름(ex : Friday) | %i | mm |
%a | 짧은 요일 이름(ex : Fri) | %S | ss |
%m | MM | %T | hh:mm:ss |
%c | MM(1~9월은 M) | %r | hh:mm:ss AM,PM |
-- SYSDATE
-- 아래의 SELECT절의 SLEEP(3)우측의 SYSDATE만 3초 뒤의 시간 값을 가져오고 있다.
SELECT NOW(), SYSDATE(), SLEEP(3), SYSDATE(), NOW();
-- NOW는 쿼리가 시작되는 시간을 항상 사용하며
-- SYSDATE는 실행 될 때의 시간이 기준이다.
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!