Sql
SQL(MariaDB) 시간함수 정리
victory-line
2024. 10. 1. 10:05
-- 1) ADDDATE, SUBDATE: 날짜에 일(DAY), 월(MONTH), 연(YEAR)을 더하거나 뺀 결과를 반환
SELECT ADDDATE('2022-01-01', INTERVAL 31 DAY) -- 2022-01-01에서 31일을 더한 날짜
, ADDDATE('2022-01-01', INTERVAL 3 MONTH) -- 2022-01-01에서 3개월을 더한 날짜
, DATE_ADD('2022-01-01', INTERVAL 4 YEAR) -- 2022-01-01에서 4년을 더한 날짜
, SUBDATE('2022-01-01', INTERVAL 31 DAY) -- 2022-01-01에서 31일을 뺀 날짜
, SUBDATE('2022-01-01', INTERVAL 3 MONTH) -- 2022-01-01에서 3개월을 뺀 날짜
, DATE_SUB('2022-01-01', INTERVAL 4 YEAR); -- 2022-01-01에서 4년을 뺀 날짜
-- 2) ADDTIME, SUBTIME: 시간에 시(HOUR), 분(MINUTE), 초(SECOND)를 더하거나 뺀 결과를 반환
SELECT ADDTIME('2022-01-01 23:59:59', '0:0:1') -- 2022-01-01 23:59:59에서 1초를 더한 시간
, ADDTIME('2022-01-01 23:59:59', '1:10:1') -- 2022-01-01 23:59:59에서 1시간 10분 1초를 더한 시간
, SUBTIME('2022-01-01 23:59:59', '23:59:59') -- 2022-01-01 23:59:59에서 23시간 59분 59초를 뺀 시간
, SUBTIME('2022-01-01 23:59:59', '24:59:59'); -- 2022-01-01 23:59:59에서 24시간 59분 59초를 뺀 시간
-- 3) CURDATE, CURTIME, NOW, SYSDATE: 현재 날짜 또는 시간을 반환
SELECT CURDATE() -- 현재 날짜를 반환 (연-월-일)
, CURTIME() -- 현재 시간을 반환 (시:분:초)
, NOW() -- 현재 날짜와 시간을 반환 (연-월-일 시:분:초)
, SYSDATE(); -- 실행 시점의 날짜와 시간을 반환 (연-월-일 시:분:초)
-- 4) YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MICROSECOND
-- : 현재 날짜/시간에서 연, 월, 일, 시, 분, 초, 마이크로초를 추출
SELECT YEAR(CURDATE()) -- 현재 날짜의 연도를 반환
, MONTH(CURDATE()) -- 현재 날짜의 월을 반환
, DAY(CURDATE()) -- 현재 날짜의 일을 반환
, HOUR(CURTIME()) -- 현재 시간의 시를 반환
, MINUTE(CURTIME()) -- 현재 시간의 분을 반환
, SECOND(CURTIME()) -- 현재 시간의 초를 반환
, MICROSECOND(CURTIME()); -- 현재 시간의 마이크로초를 반환
-- 5) DATE, TIME: DATETIME 형식에서 날짜와 시간만 각각 추출
SELECT DATE(NOW()) -- 현재 날짜(연-월-일)를 반환
, TIME(NOW()); -- 현재 시간(시:분:초)을 반환
-- 6) DATEDIFF, TIMEDIFF: 두 날짜 또는 시간 간의 차이를 반환
SELECT DATEDIFF('2022-01-01', NOW()) -- '2022-01-01'과 현재 날짜의 일 수 차이를 반환
, DATEDIFF(NOW(), '2024-08-26') -- 현재 날짜와 '2024-08-26'의 일 수 차이를 반환
, ABS(DATEDIFF('2022-01-01', NOW())); -- 절대값으로 일 수 차이를 반환
SELECT TIMEDIFF('23:23:59', '12:11:10') -- 두 시간의 차이를 반환
, TIMEDIFF('12:11:10', '23:23:59'); -- 시간 차를 역순으로 반환
-- 7) DAYOFWEEK, MONTHNAME, DAYOFYEAR: 현재 날짜의 요일, 월 이름, 연도 내에서 몇 번째 일인지 반환
SELECT DAYOFWEEK(CURDATE()) -- 현재 날짜의 요일을 반환 (1: 일요일, 2: 월요일, ...)
, MONTHNAME(CURDATE()) -- 현재 날짜의 월 이름을 반환 (예: October)
, DAYOFYEAR(CURDATE()); -- 현재 날짜가 연도 중 몇 번째 일인지 반환
-- 8) LAST_DAY: 지정된 날짜의 해당 월의 마지막 날을 반환
SELECT LAST_DAY('2024-10-01') '마지막날'; -- 2024년 10월의 마지막 날을 반환
-- 9) MAKEDATE: 연도와 연중 몇 번째 일인지로 날짜를 생성
SELECT MAKEDATE(2024, 275); -- 2024년의 275번째 날인 날짜를 반환
-- 10) MAKETIME: 시, 분, 초로 시간 데이터를 생성
SELECT MAKETIME(12, 11, 10); -- 12시 11분 10초의 시간을 반환
-- 11) PERIOD_ADD, PERIOD_DIFF: 년월 기간을 더하거나 뺀 결과를 반환
SELECT PERIOD_ADD(202201, 11) -- 2022년 1월에서 11개월을 더한 년월을 반환
, PERIOD_DIFF(202201, 201812); -- 2022년 1월과 2018년 12월 사이의 개월 수 차이를 반환
-- 12) QUARTER: 지정된 날짜가 몇 분기인지 반환
SELECT QUARTER('2024-12-01'); -- 2024년 12월 1일이 4분기임을 반환
-- 13) TIME_TO_SEC: 시간 데이터를 초 단위로 변환
SELECT TIME_TO_SEC('0:1:10'); -- '0:1:10' (1분 10초)을 초 단위로 변환하여 반환