SQL 날짜 함수: 초보자를 위한 종합 가이드

안녕하세요, SQL 열정가 여러분! SQL 날짜 함수의 세계로 안내해드리는 여정에 환영합니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 데이터베이스 관리의 이 중요한 부분을 안내해드리는 것을 기대하고 있습니다. 코드를 한 줄도 작성해본 적이 없으신 분들도 걱정 마세요 - 우리는 가장 기본적인 것부터 시작하여 차례대로 진행하겠습니다.

SQL - Date Functions

날짜 함수의 중요성

먼저 간단한 이야기를 공유하겠습니다. 제 교사 경력 초반에, 생일 알림 앱을 개발하는 학생이 있었습니다. 그는 날짜 계산에 어려움을 겪다가 SQL 날짜 함수를 발견한 후, 앱이 거의 기능이 없는 것에서 인상적인 효율성을 가진 것으로 바뀌었습니다. 이 함수를 마스터하면 이런 힘이 있답니다!

날짜 데이터 유형 이해

H2: DATE 데이터 유형

SQL에서 날짜는 일반적으로 'YYYY-MM-DD' 형식으로 저장됩니다. 예를 들어:

CREATE TABLE events (
event_id INT,
event_name VARCHAR(50),
event_date DATE
);

INSERT INTO events VALUES (1, '회사 피크닉', '2023-07-15');

이 코드는 날짜 열을 가진 테이블을 생성하고 특정 날짜를 가진 행을 추가합니다.

H2: DATETIME 데이터 유형

날짜와 시간을 모두 저장해야 할 때 DATETIME이 도움이 됩니다:

CREATE TABLE logs (
log_id INT,
log_message VARCHAR(100),
log_timestamp DATETIME
);

INSERT INTO logs VALUES (1, '사용자 로그인', '2023-07-15 14:30:00');

이 예제는 이벤트의 날짜와 시간을 저장합니다.

필수 날짜 함수

이제 가장 흔히 사용되는 날짜 함수를 탐구해보겠습니다. 이를 표로 정리하여 쉽게 참조할 수 있도록 하겠습니다:

함수 설명 예제
CURRENT_DATE() 현재 날짜 반환 SELECT CURRENT_DATE();
CURRENT_TIMESTAMP() 현재 날짜와 시간 반환 SELECT CURRENT_TIMESTAMP();
DATE() datetime에서 날짜 부분 추출 SELECT DATE('2023-07-15 14:30:00');
YEAR() 날짜에서 연도 추출 SELECT YEAR('2023-07-15');
MONTH() 날짜에서 월 추출 SELECT MONTH('2023-07-15');
DAY() 날짜에서 일 추출 SELECT DAY('2023-07-15');
DATEDIFF() 두 날짜 간의 차이 계산 SELECT DATEDIFF('2023-07-15', '2023-07-01');
DATE_ADD() 지정된 시간 간격을 날짜에 추가 SELECT DATE_ADD('2023-07-15', INTERVAL 10 DAY);
DATE_SUB() 지정된 시간 간격을 날짜에서 제거 SELECT DATE_SUB('2023-07-15', INTERVAL 1 MONTH);

이제 이를 실제 예제로 설명해보겠습니다!

H3: CURRENT_DATE()와 CURRENT_TIMESTAMP() 사용

이 함수들은 로그와 추적 목적으로 매우 유용합니다:

INSERT INTO logs (log_message, log_timestamp)
VALUES ('일일 백업 완료', CURRENT_TIMESTAMP());

이 쿼리는 현재 날짜와 시간으로 로그 항목을 추가합니다. 데이터에 자동 타임스탬프를 추가하는 것과 같습니다!

H3: 날짜 부분 추출

자주 특정 날짜 부분을 작업해야 할 때가 있습니다:

SELECT
event_name,
event_date,
YEAR(event_date) AS event_year,
MONTH(event_date) AS event_month,
DAY(event_date) AS event_day
FROM events;

이 쿼리는 이벤트와 그 날짜를 연도, 월, 일로 분해합니다. 이는 이벤트를 월이나 연도별로 정리하는 데 완벽합니다!

H3: 날짜 차이 계산

DATEDIFF()는 두 날짜 간의 일수를 찾는 데 사용됩니다:

SELECT
event_name,
event_date,
DATEDIFF(CURRENT_DATE(), event_date) AS days_since_event
FROM events;

이 쿼리는 각 이벤트 이후로 지났던 일수를 계산합니다. 기념일이나 기간 계산에 유용합니다!

H3: 시간 추가와 제거

다음 주나 전월에 일정을 예약해야 할 때 DATE_ADD()와 DATE_SUB()가 도와줍니다:

SELECT
event_name,
event_date,
DATE_ADD(event_date, INTERVAL 1 WEEK) AS next_week,
DATE_SUB(event_date, INTERVAL 1 MONTH) AS last_month
FROM events;

이 쿼리는 원래 이벤트 날짜와 미래 1주일, 과거 1개월 날짜를 보여줍니다. 반복 이벤트 계획에 적합합니다!

실제 적용 사례

이제 기본적인 내용을 다루었으므로, 실제 사용 사례를 몇 가지 살펴보겠습니다:

H3: 생일 알림

제 학생의 생일 알림 앱을 다시 떠올려보겠습니다. 다음과 같이 생일이 다가오는 사용자를 조회할 수 있습니다:

SELECT
name,
birthdate,
DATEDIFF(
DATE_ADD(birthdate,
INTERVAL YEAR(CURRENT_DATE()) - YEAR(birthdate) +
IF(DAYOFYEAR(CURRENT_DATE()) > DAYOFYEAR(birthdate), 1, 0)
YEAR),
CURRENT_DATE()
) AS days_until_birthday
FROM users
WHERE
DATEDIFF(
DATE_ADD(birthdate,
INTERVAL YEAR(CURRENT_DATE()) - YEAR(birthdate) +
IF(DAYOFYEAR(CURRENT_DATE()) > DAYOFYEAR(birthdate), 1, 0)
YEAR),
CURRENT_DATE()
) BETWEEN 0 AND 30
ORDER BY days_until_birthday;

이 복잡해 보이는 쿼리는 사실 매우 간단한 일을 합니다: 다음 30일 내에 생일이 다가오는 모든 사용자를 찾습니다. 여러 날짜 함수를 조합하여 특정 목표를 달성하는 좋은 예제입니다.

H3: 보고서 생성

날짜 함수는 보고서 작성에도 매우 유용합니다. 다음은 판매 보고서에 사용될 수 있는 쿼리입니다:

SELECT
YEAR(order_date) AS year,
MONTH(order_date) AS month,
COUNT(*) AS total_orders,
SUM(order_amount) AS total_sales
FROM orders
GROUP BY YEAR(order_date), MONTH(order_date)
ORDER BY year, month;

이 쿼리는 주문과 판매를 연도와 월별로 요약하여 시간에 따른 비즈니스 성과를 명확히 보여줍니다.

결론

축하합니다! SQL 날짜 함수의 세계로的第一步을 냈습니다. 이 강력한 도구들은 시간에 기반한 데이터를 쉽게 관리하는 데 도움이 될 것입니다. 여러분이 생일 알림 앱을 만들거나 보고서를 작성하거나 역사적 추세를 분석하는 데 자주 사용하게 될 것입니다.

기억하시오, 연습이 완벽을 만든다. 이 함수들을 여러분의 프로젝트에서 실험해보세요. 자주 사용하게 될 것이라는 것에 놀라게 될 것입니다!

마무리로, 약간의 SQL 유머를 전합니다: 데이터베이스 관리자들이 DATE 함수를 좋아하는 이유는 언제나 시간을 알고 있기 때문입니다! (아, 그렇죠, 우리 컴퓨터 교사는 노력해야 하죠!)

코드 작성을 계속하시고, 호기심을 유지하시고, 데이터 모험에서 즐거움을 느끼시길 바랍니다!

Credits: Image by storyset