이전에 게시글에 문자와 숫자 함수를 이용하여 쿼리를 다뤘었습니다. 문득숫자, 문자 만큼 DBMS에서 내장함수를 많이 사용한다는 것을 깨달았습니다. 그래서 날짜 및 시간을 다루는 내장함수를 소개하겠습니다.
날짜 및 시간 함수 정리
CURDATE, CURTIME, NOW, SYSDATE
SELECT CURDATE() -- 2023-06-19
, CURTIME() -- 10:30:45
, NOW() -- 2023-06-19 10:30:45
, SYSDATE() -- 2023-06-19 10:30:45
FROM DUAL;
가장 먼저 소개할 함수는 현재의 날짜와 시간을 알아내는 함수입니다.
CURDATE함수는 현재의 년-월-일을 출력하고 CURTIME은 현재의 시:분:초를 출력합니다. NOW와 SYSDATE함수는 년-월-일 시:분:초를 출력합니다.
YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MICROSECOND
SELECT YEAR(SYSDATE()) -- 2023
, MONTH(SYSDATE()) -- 6
, DAY(SYSDATE()) -- 19
, HOUR(SYSDATE()) -- 10
, MINUTE(SYSDATE()) -- 30
, SECOND(SYSDATE()) -- 45
, MICROSECOND(SYSDATE()) --100000
FORM DUAL;
DATE 형식의 값을 받으면 필요한 날짜 시간 데이터를 뽑는 함수들입니다. SYSDATE 함수로 받은 현재의 날짜와 시간을 위에서부터 년, 월, 일, 시, 분, 초, 마이크로초로 반환합니다.
DATE, TIME
SELECT DATE(SYSDATE()) -- 2023-06-19
, TIME(SYSDATE()) -- 10:30:45
FORM DUAL;
DATE와 TIME함수는 각각 '년-월-일', '시:분:초'로 반환하는 함수입니다. 위의 예제는 현재 시각을 날짜와 시간으로 바꾸었습니다.
LAST_DAY
SELECT LAST_DAY('2023-06-19') -- 2023-06-30
, LAST_DAY('2024-02-28') -- 2024-02-29
FROM DUAL;
LASY_DAY 함수는 해당 월의 마지막 날을 출력하는 함수입니다. 위의 예제는 2023년 6월의 마지막 날은 '2023-06-30'입니다. 추가로 윤년이 있는 2월은 2월 29일로 출력합니다.
TIME_TO_SEC
SELECT TIME_TO_SEC('10:30:45') -- 37845
FROM DUAL;
TIME_TO_SEC 함수는 시간을 초 단위로 구합니다. 위에서는 10*60*60 + 30*60 + 45의 값인 '37845'가 출력됩니다.
DATEDIFF, TIMEDIFF, TIMESTAMPDIFF
SELECT DATEDIFF('2023-06-19', '2023-06-07') -- 12
, TIMEDIFF('22:30:00', '14:30:00') -- 08:00:00
, TIMESTAMPDIFF(HOUR, '2023-06-19 22:30:00', '2023-06-07 14:30:00') -- -280
FROM DUAL;
세 함수는 날짜와 시간을 비교하는 함수입니다. 먼저 DATEDIFF 함수는 두 날짜를 비교하는 함수입니다. 왼쪽부터 날짜1 - 날짜2의 값을 나옵니다. 두 번째로 TIMEDIFF 함수는 두 시간을 비교합니다. 시간1 - 시간2의 값을 호출합니다. 마지막으로 TIMESTAMPDIFF 함수는 날짜:시간2 - 날짜:시간1의 값을 HOUR로 호출합니다. HOUR이 아니라 다른 시간 단위로도 호 할 수 있습니다.
ADDDATE, SUBDATE, ADDTIME, SUBTIME
SELECT ADDDATE('2023-06-19', INTERVAL 31 DAY) -- 2023-07-20
, SUBDATE('2023-06-19', INTERVAL 31 DAY) -- 2023-05-19
, ADDTIME('2023-06-19 22:30:45', '1:0:0') -- 2023-06-19 23:30:45
, SUBTIME('2023-06-19 22:30:45', '1:0:0') -- 2023-06-19 21:30:45
FROM DUAL;
먼저 ADDDATE, SUBDATE 함수는 날짜를 더하거나 는 함수입니다. ADDTIME, SUBTIME 함수는 시간을 더하거나 빼는 함수입니다. 예제는 31일을 더하거나 빼는 예제와 1시간을 더하거나 빼는 예제입니다. 이를통해 다음과 같은 결과가 나왔습니다.
DAYOFWEEK, MONTHNAME, DAYOFYEAR
SELECT DAYOFWEEK(SYSDATE()) -- 2
, MONTHNAME(SYSDATE()) -- June
, DAYOFYEAR(SYSDATE()) -- 170
FROM DUAL;
-- SYSDATE()
-- 2023-06-19 10:30:45
DAYOFWEEK 함수는 요일을 숫자로 출력합니다. 숫자는 다음과 같습니다.
일 | 월 | 화 | 수 | 목 | 금 | 토 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
MONTHNAME 함수는 대상이 되는 달의 영어를 출력합니다. 기준일자는 6월이므로 June을 출력합니다.
DAYOFYEAR 함수는 1년 중 지금 며이 지났는지 출력합니다.
'컴퓨터 > MySQL' 카테고리의 다른 글
MySQL (16) - 뷰(View)에 대하여 알아보자 (0) | 2023.10.03 |
---|---|
MySQL (15) - 쿼리문을 합하는 방법 (UNION, UNION ALL) (0) | 2023.08.13 |
MySQL (13) - 프로시저(Procedure)와 함수(Function) (0) | 2023.05.01 |
MySQL (12) - 집계함수에 대하여 알아보자 (COUNT, SUM, AVG, MIN, MAX) (0) | 2023.04.05 |
MySQL (11) - 내장함수를 이용하여 숫자를 다뤄보자 (0) | 2023.04.02 |