날짜 함수와 연산 SQL

KUN·2025년 3월 20일

문제에 날짜를 다루는 문제가 너무 많고, 문제를 해결하려고 할 때마다 찾아보는 것도 좋으나 오늘은 문제를 풀이하는 것 보다 날짜에 대해서 정확하고 자세하게 알아가는 게 도움이 될꺼라 생각 됩니다.

아무것도 모르는 채로 그저 인터넷에 나온 정보로 쓰니 됐네? 라는 방식은 나에게 1개의 도움을 되겠지만 2~3개의 도움은 되지 않습니다.

오늘은 날짜 함수와 연산 그리고 이렇게 쓰이는 이유에 대해서 공부해보려고 합니다.

MySQL DATE : 공식문서

CURDATE(): 현재 날짜를 반환합니다. ('YYYY-MM-DD' 형식)
CURTIME(): 현재 시간을 반환합니다. ('HH:MM:SS' 형식)
NOW(): 현재 날짜와 시간을 반환합니다. ('YYYY-MM-DD HH:MM:SS' 형식)
SYSDATE(): 현재 날짜와 시간을 반환합니다. ('YYYY-MM-DD HH:MM:SS' 형식)
UTC_DATE(): UTC 기준의 현재 날짜를 반환합니다.
UTC_TIME(): UTC 기준의 현재 시간을 반환합니다.
UTC_TIMESTAMP(): UTC 기준의 현재 날짜와 시간을 반환합니다.



UTC(Coordinated Universal Time)는 전 세계에서 사용되는 표준 시간

DATE_FORMAT(date, format): 날짜를 지정한 형식으로 반환합니다.
예: DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') → '2025-03-20 13:43:12'
형식 지정자:
%Y: 4자리 연도 (예: 2025)
%m: 2자리 월 (01~12)
%d: 2자리 일 (01~31)
%H: 2자리 시간 (00~23)
%i: 2자리 분 (00~59)
%s: 2자리 초 (00~59)
%a: 요일 약어 (Sun, Mon, ...)
%W: 요일 전체 이름 (Sunday, Monday, ...)
%b: 월 약어 (Jan, Feb, ...)
%M: 월 전체 이름 (January, February, ...)

		UNIT

YEAR(date): 날짜에서 연도를 추출합니다.
MONTH(date): 날짜에서 월을 추출합니다.
DAY(date): 날짜에서 일을 추출합니다.
HOUR(time): 시간에서 시간을 추출합니다.
MINUTE(time): 시간에서 분을 추출합니다.
SECOND(time): 시간에서 초를 추출합니다.
WEEKDAY(date): 날짜에서 요일을 추출합니다. (월요일=0, 일요일=6)
DAYNAME(date): 날짜에서 요일 이름을 추출합니다. (예: 'Monday')
MONTHNAME(date): 날짜에서 월 이름을 추출합니다. (예: 'January')

날짜 및 시간 계산 함수
DATE_ADD(date, INTERVAL expr unit): 날짜에 지정된 간격만큼 더합니다.
예: DATE_ADD('2025-03-20', INTERVAL 1 MONTH) → '2025-04-20'

DATE_SUB(date, INTERVAL expr unit): 날짜에서 지정된 간격만큼 뺍니다.
예: DATE_SUB('2025-03-20', INTERVAL 1 MONTH) → '2025-02-20'

DATEDIFF(date1, date2): 두 날짜 간의 차이를 일수로 반환합니다.
예: DATEDIFF('2025-03-20', '2020-03-20') → 1825

TIMEDIFF(time1, time2): 두 시간 간의 차이를 시간으로 반환합니다.
예: TIMEDIFF('14:00:00', '12:30:00') → '1:30:00'

TIMESTAMPDIFF(unit, date1, date2): 두 날짜 간의 차이를 지정된 단위로 반환합니다.
예: TIMESTAMPDIFF(YEAR, '2020-03-20', '2025-03-20') → 5

PERIOD_DIFF(PERIOD1, PERIOD2): 두 기간 사이의 개월 수를 반환합니다.
예: PERIOD_DIFF(202503, 202003) → 6

LAST_DAY(date): 주어진 날짜가 속한 월의 마지막 날을 반환합니다.
예: LAST_DAY('2025-03-20') → '2025-03-31'

STR_TO_DATE(str, format): 문자열을 날짜 형식으로 변환합니다.
예: STR_TO_DATE('2025-03-20', '%Y-%m-%d') → '2025-03-20'

DATE(date): 날짜 부분만 추출합니다.
예: DATE('2025-03-20 13:43:12') → '2025-03-20'

TIME(time): 시간 부분만 추출합니다.
예: TIME('2025-03-20 13:43:12') → '13:43:12'

실제로 UNIX_TIMESTAMP 는 오늘 날짜를 대입해보니 아래와 같이 값이 생겼습니다.

이건 나온 값을 또 날짜로 변환하니 오늘 날짜가 나옴을 알 수 있었습니다.

문제에 많이 나오는 년, 월 비교문도 다음과 같이 처리할 수 있었습니다.

둘의 연간을 바꿔보니 값도 달라짐을 알 수 있습니다.
즉 TIMESTAMPIFF(Unit, [빼려는 날짜], [기준날짜]) 가 됨을 알았습니다.

정리하면 다음과 같으나 문득 궁금해졌습니다.
어떤 방식으로 날짜연산이 작동하는 가? 즉, 내부작동 방식에 대해서 알아보도록 하겠습니다.
UTC 와 TIMEZONE

profile
배우노라, 실험하노라, 기록하노라

0개의 댓글