MySQL 날짜와 시간 함수: 초보자 가이드
안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 MySQL의 날짜와 시간 함수의 세계를 탐험하게 될 것입니다. 코드를 한 줄도 작성해 본 적이 없으신 분이라도 걱정하지 마세요 - 저는 여러분의 친절한 안내자가 되겠습니다. 단계별로 설명하겠습니다. 이 튜토리얼이 끝나면, 여러분은 프로처럼 날짜와 시간을 조작할 수 있을 것입니다!
날짜와 시간 함수의 중요성
들어가기 전에 간단한 이야기를 나누겠습니다. 몇 년 전, 제 학생 중 한 명이 생일 알림 앱을 개발하려고 했습니다. 그는 날짜 계산에 어려움을 겪다가 MySQL의 날짜 함수를 발견했습니다. 갑자기 그의 앱은 사용자들에게 친구들의 생일까지 몇 일 남았는지 알 수 있게 되었습니다. 마법 같은 일이었습니다! 이 함수를 마스터하는 것의 힘이죠.
기본 시작: 현재 날짜와 시간
먼저 기본적인 내용을 알아보겠습니다. MySQL은 현재 날짜와 시간을 가져오는 여러 가지 함수를 제공합니다. 가장 흔한 것들은 다음과 같습니다:
함수 | 설명 | 예제 출력 |
---|---|---|
NOW() | 현재 날짜와 시간 | 2023-05-15 14:30:00 |
CURDATE() | 현재 날짜 | 2023-05-15 |
CURTIME() | 현재 시간 | 14:30:00 |
이제 이들을 실제로 사용해보겠습니다:
SELECT NOW(), CURDATE(), CURTIME();
이 쿼리는 현재 날짜와 시간, 오직 날짜, 오직 시간을 반환합니다. 꽤 쉬운东西 아닙니까?
출력 이해
NOW() 함수는 날짜와 시간을 포함한 datetime 값을 반환합니다. CURDATE()는 'YYYY-MM-DD' 형식의 날짜를 제공하며, CURTIME()은 'HH:MM:SS' 형식의 시간을 제공합니다.
날짜와 시간의 부분 추출
이제 datetime 값이 있고, 그 중 특정 부분을 추출하고 싶다고 가정해 봅시다. MySQL은 이를 위한 유용한 함수들을 제공합니다:
함수 | 설명 | 예제 사용 | 예제 출력 |
---|---|---|---|
YEAR() | 연도 추출 | YEAR('2023-05-15') | 2023 |
MONTH() | 월 추출 | MONTH('2023-05-15') | 5 |
DAY() | 일 추출 | DAY('2023-05-15') | 15 |
HOUR() | 시간 추출 | HOUR('14:30:00') | 14 |
MINUTE() | 분 추출 | MINUTE('14:30:00') | 30 |
SECOND() | 초 추출 | SECOND('14:30:45') | 45 |
이제 이들을 시도해보겠습니다:
SELECT
YEAR('2023-05-15') AS year,
MONTH('2023-05-15') AS month,
DAY('2023-05-15') AS day,
HOUR('14:30:45') AS hour,
MINUTE('14:30:45') AS minute,
SECOND('14:30:45') AS second;
이 쿼리는 날짜와 시간의 각 부분을 깔끔하게 추출해줍니다.
실 세계 적용
사용자 생일을 표시하는 웹사이트를 개발 중이라고 가정해 봅시다. MONTH()와 DAY() 함수를 사용하여 생일의 월과 일을 추출하여, 연도를 무시하고 사용자에게 생일을 축하할 수 있습니다!
날짜 산술: 추가와 뺄셈
MySQL의 날짜 함수 중 가장 흥미로운 기능 중 하나는 날짜에 대한 계산을 할 수 있다는 점입니다. 이를 위한 함수들을 살펴보겠습니다:
함수 | 설명 | 예제 사용 |
---|---|---|
DATE_ADD() | 날짜에 간격 추가 | DATE_ADD('2023-05-15', INTERVAL 1 DAY) |
DATE_SUB() | 날짜에서 간격 뺌음 | DATE_SUB('2023-05-15', INTERVAL 1 MONTH) |
DATEDIFF() | 날짜 간의 차이 찾기 | DATEDIFF('2023-05-15', '2023-01-01') |
이렇게 사용할 수 있습니다:
SELECT
DATE_ADD('2023-05-15', INTERVAL 1 DAY) AS tomorrow,
DATE_SUB('2023-05-15', INTERVAL 1 MONTH) AS last_month,
DATEDIFF('2023-05-15', '2023-01-01') AS days_since_new_year;
이 쿼리는 내일의 날짜, 한 달 전의 날짜, 그리고 신정 이후 지나간 일수를 보여줍니다.
간격의 힘
DATE_ADD()와 DATE_SUB() 함수에서 사용하는 INTERVAL 키워드는 매우 유연합니다. 연도, 월, 일, 시간, 분, 초까지 추가하거나 뺄 수 있습니다!
날짜와 시간 포맷ting
때로는 날짜와 시간을 특정 형식으로 표시해야 합니다. 이때 DATE_FORMAT() 함수가 유용합니다:
SELECT DATE_FORMAT('2023-05-15 14:30:00', '%W, %M %d, %Y at %h:%i %p') AS formatted_date;
이 outputs: "Monday, May 15, 2023 at 02:30 PM"
% 기호 뒤에 오는 글자는 포맷 지시자입니다. 일반적인 것들은 다음과 같습니다:
지시자 | 설명 |
---|---|
%W | 전체 요일 이름 |
%M | 전체 월 이름 |
%d | 월일 (01-31) |
%Y | 4자리 연도 |
%h | 시간 (01-12) |
%i | 분 (00-59) |
%p | AM 또는 PM |
모든 것을 통합
이제 배운 것을 실제 예제에 적용해보겠습니다. 직원 근무 기념일을 추적하는 시스템을 개발 중이라고 가정해 봅시다:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
hire_date DATE
);
INSERT INTO employees VALUES
(1, 'Alice', '2020-06-15'),
(2, 'Bob', '2021-03-20'),
(3, 'Charlie', '2019-11-01');
SELECT
name,
hire_date,
YEAR(CURDATE()) - YEAR(hire_date) AS years_employed,
DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))),
INTERVAL IF(CURDATE() > DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))), 1, 0) YEAR)
AS next_anniversary,
DATEDIFF(
DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))),
INTERVAL IF(CURDATE() > DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))), 1, 0) YEAR),
CURDATE()
) AS days_until_anniversary
FROM employees;
이 쿼리는 다음과 같은 작업을 수행합니다:
- 각 직원이 회사에 근무한 년수를 계산합니다.
- 그들의 다음 근무 기념일을 결정합니다.
- 다음 기념일까지 남은 일수를 계산합니다.
결론
축하합니다! 여러분은 MySQL의 날짜와 시간 함수의 세계로 첫 걸음을 뗐습니다. 우리는 현재 날짜와 시간을 가져오는 방법, 날짜의 부분을 추출하는 방법, 날짜 산술, 그리고 날짜와 시간을 포맷ting하는 방법을 다뤘습니다.
기억하시길, 실습이 완벽함을 만듭니다. 이 함수들을 사용하여 자신만의 쿼리를 만들어보세요. 예전에 언급한 생일 알림 앱을 만들어보세요! 이 함수들을 더 많이 사용할수록 더 익숙해질 것입니다.
그리고 항상 기억하시길, 프로그래밍의 세계에서는 매일 새로운 학습과 성장의 기회가 있습니다. 행복하게 코딩하세요, 미래의 데이터베이스 마스터 여러분!
Credits: Image by storyset