MySQL 날짜와 시간 함수: 초보자 가이드

안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 MySQL의 날짜와 시간 함수의 세계를 탐험하게 될 것입니다. 코드를 한 줄도 작성해 본 적이 없으신 분이라도 걱정하지 마세요 - 저는 여러분의 친절한 안내자가 되겠습니다. 단계별로 설명하겠습니다. 이 튜토리얼이 끝나면, 여러분은 프로처럼 날짜와 시간을 조작할 수 있을 것입니다!

MySQL - Date and Time Functions

날짜와 시간 함수의 중요성

들어가기 전에 간단한 이야기를 나누겠습니다. 몇 년 전, 제 학생 중 한 명이 생일 알림 앱을 개발하려고 했습니다. 그는 날짜 계산에 어려움을 겪다가 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;

이 쿼리는 다음과 같은 작업을 수행합니다:

  1. 각 직원이 회사에 근무한 년수를 계산합니다.
  2. 그들의 다음 근무 기념일을 결정합니다.
  3. 다음 기념일까지 남은 일수를 계산합니다.

결론

축하합니다! 여러분은 MySQL의 날짜와 시간 함수의 세계로 첫 걸음을 뗐습니다. 우리는 현재 날짜와 시간을 가져오는 방법, 날짜의 부분을 추출하는 방법, 날짜 산술, 그리고 날짜와 시간을 포맷ting하는 방법을 다뤘습니다.

기억하시길, 실습이 완벽함을 만듭니다. 이 함수들을 사용하여 자신만의 쿼리를 만들어보세요. 예전에 언급한 생일 알림 앱을 만들어보세요! 이 함수들을 더 많이 사용할수록 더 익숙해질 것입니다.

그리고 항상 기억하시길, 프로그래밍의 세계에서는 매일 새로운 학습과 성장의 기회가 있습니다. 행복하게 코딩하세요, 미래의 데이터베이스 마스터 여러분!

Credits: Image by storyset