[SQL] 날짜 함수

SeonJin·2023년 9월 5일
0

SQL

목록 보기
2/4
post-custom-banner

DATE_FORMAT()

날짜/시간 형식화, 주어진 date를 format에 맞게 문자열로 반환

SELECT DATE_FORMAT('1999-05-24', '%y %m %d'); -- 99 05 24
SELECT DATE_FORMAT('1999-05-24', '%Y %M %D'); -- 1999 May 24th
SELECT DATE_FORMAT(NOW(), "%b %m %D %H %i %s"); -- Sep 09 5th 10 02 28


CURDATE(), CURRENT_DATE()

system의 현재 날짜 출력

SELECT CURDATE();
SELECT CURRENT_DATE();
SELECT CURDATE()+1; -- 연산 가능

CURTIME()CURRENT_TIME()

system의 현재 시각 출력

SELECT CURTIME();
SELECT CURRENT_TIME();

NOW()CURRENT_TIMESTAMP()

system의 현재 날짜와 시간 출력

SELECT NOW();

YEAR(), MONTH(), DAY(), WEEKDAY()

년/월/일/요일 추출

YEAR() = DAYOFYEAR()

MONTH() = DAYOFMONTH()

DAY() = DAYOFMONTH()

SELECT YEAR(hiredate), MONTH(hiredate), DAY(hiredate) FROM emp;
SELECT WEEKDAY("2017-01-01"); -- 월요일 0 ~ 일요일 6

HOUR(), MINUTE(), SECOND()

시/분/초 추출

SELECT HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());

DAYOFWEEK(), DAYNAME()

해당 주에서 몇 번째 날인지 반환

SELECT DAYOFWEEK("2017-06-15"); -- 5(숫자로 반환), 일요일 1 ~ 토요일 7
SELECT DAYNAME("2017-06-15"); -- Thursday(문자로 반환)

ADDDATE(), DATE_ADD(), ADDTIME()

연, 월, 일, 시간 더하기

-- ADDDATE(date, INTERVAL value addunit)
SELECT ADDDATE(CURDATE(), INTERVAL 1 DAY);
SELECT ADDDATE(CURDATE(), INTERVAL 1 MONTH);
SELECT ADDDATE(CURDATE(), INTERVAL -1 YEAR);
SELECT DATE_ADD(CURDATE(), INTERVAL -1 YEAR);
SELECT ADDDATE(hiredate, 2) FROM emp; -- value만 있을 때, day가 defalt

-- ADDTIEM(datetime, addtime)
SELECT ADDTIME(CURTIME(), '1:10:5'); -- add 1 hour 10 minute 5 second
SELECT ADDTIME(NOW(), '2 1:10:5'); -- add 2 day 1 hour 10 minute 5 second

SUBDATE(), DATE_SUB(), SUBTIME()

연, 월, 일, 시간 빼기

-- SUBDATE(date, INTERVAL value unit)
SELECT SUBDATE("2017-06-15 09:34:21", INTERVAL 15 MINUTE);
SELECT SUBDATE("2017-06-15", INTERVAL -2 MONTH);

-- SUBTIEM(datetime, addtime)
SELECT SUBTIME("10:24:21", "5"); -- minus 5 second
SELECT SUBTIME("10:24:21", "3:2:5"); -- minus 3 hour 2 minute 5 second

EXTRACT()

DATE_ADD, DATE_SUB 와 흡사한 기능을 수행하며, 날짜의 일부를 반환

-- EXTRACT(UNIT FROM DATE);
SELECT CURDATE(), EXTRACT(MONTH FROM CURDATE()) AS MONTH; -- month 반환
SELECT CURDATE(), EXTRACT(YEAR FROM CURDATE()) AS YEAR; -- year 반환
SELECT CURDATE(), EXTRACT(DAY FROM CURDATE()) AS DAY; -- day 반환
SELECT CURDATE(), EXTRACT(WEEK FROM CURDATE()) AS WEEK; -- week 반환
SELECT CURDATE(), EXTRACT(QUARTER FROM CURDATE()) AS QUARTER; -- quarter 반환
SELECT CURDATE(), EXTRACT(YEAR_MONTH FROM CURDATE()) AS "YEAR_MONTH";
SELECT NOW(), EXTRACT(HOUR FROM CURDATE()) AS HOUR;
SELECT NOW(), EXTRACT(MINUTE FROM CURDATE()) AS MINUTE;
SELECT NOW(), EXTRACT(SECOND FROM CURDATE()) AS SECOND;

TIME_TO_SEC()

시간을 초로 변환

SELECT CURTIME(), TIME_TO_SEC(CURTIME());

DATEDIFF()

두 날짜 사이의 일수를 숫자로 반환(date1 - date2)

-- DATEDIFF(date1, date2) -> date1 - date2
SELECT hiredate, DATEDIFF(CURDATE(), hirdate) FROM emp; 
SELECT DATEDIFF(CURDATE(), '1999-05-24') 일수 FROM emp;

TIMEDIFF()

두 시간의 차이를 datetime 형태로 반환(time1 - time2)

-- TIMEDIFF(time1, time2) -> time1 - time2
SELECT CURTIME(), TIMEDIFF(CURTIME(), '08:48:27');
SELECT TIME_TO_SEC(TIMEDIFF(CURTIME(), '08:48:27'));
profile
study notebook
post-custom-banner

0개의 댓글