Hướng dẫn tổng quan về hàm ngày trong SQL cho người mới bắt đầu

Xin chào các bạn đam mê SQL! Chào mừng các bạn đến với hành trình khám phá thế giới các hàm ngày trong SQL. Là một người giáo viên máy tính gần gũi, tôi rất vui mừng được hướng dẫn các bạn qua khía cạnh quan trọng này của quản lý cơ sở dữ liệu. Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - chúng ta sẽ bắt đầu từ những điều cơ bản và dần dần nâng cao.

SQL - Date Functions

Tại sao hàm ngày lại quan trọng

Trước khi chúng ta bắt đầu, hãy cùng chia sẻ một câu chuyện ngắn. Ở đầu đời giáo viên của tôi, tôi có một học sinh đang xây dựng một ứng dụng nhắc nhở sinh nhật. Anh ấy gặp khó khăn trong việc tính toán ngày cho đến khi anh ấy khám phá ra các hàm ngày trong SQL. Ngay lập tức, ứng dụng của anh ấy từ mức hoạt động yếu ớt trở nên ấn tượng và hiệu quả. Đó chính là sức mạnh của việc thành thạo các hàm này!

Hiểu về các loại dữ liệu ngày

H2: Kiểu dữ liệu DATE

Trong SQL, ngày thường được lưu trữ theo định dạng 'YYYY-MM-DD'. Ví dụ:

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

INSERT INTO events VALUES (1, 'Tiệc dã ngoại công ty', '2023-07-15');

Điều này tạo ra một bảng với một cột ngày và chèn một hàng với ngày cụ thể.

H2: Kiểu dữ liệu DATETIME

Khi bạn cần lưu trữ cả ngày và giờ, DATETIME sẽ giúp đỡ:

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

INSERT INTO logs VALUES (1, 'Đăng nhập người dùng', '2023-07-15 14:30:00');

Ví dụ này lưu trữ cả ngày và giờ của một sự kiện.

Các hàm ngày quan trọng

Bây giờ, hãy cùng khám phá một số hàm ngày thường được sử dụng nhất. Tôi sẽ trình bày chúng trong bảng để dễ dàng tham khảo:

Hàm Mô tả Ví dụ
CURRENT_DATE() Trả về ngày hiện tại SELECT CURRENT_DATE();
CURRENT_TIMESTAMP() Trả về ngày và giờ hiện tại SELECT CURRENT_TIMESTAMP();
DATE() Tách phần ngày ra từ datetime SELECT DATE('2023-07-15 14:30:00');
YEAR() Tách phần năm ra từ ngày SELECT YEAR('2023-07-15');
MONTH() Tách phần tháng ra từ ngày SELECT MONTH('2023-07-15');
DAY() Tách phần ngày ra từ ngày SELECT DAY('2023-07-15');
DATEDIFF() Tính toán sự khác biệt giữa hai ngày SELECT DATEDIFF('2023-07-15', '2023-07-01');
DATE_ADD() Thêm một khoảng thời gian xác định vào ngày SELECT DATE_ADD('2023-07-15', INTERVAL 10 DAY);
DATE_SUB() Trừ một khoảng thời gian xác định khỏi ngày SELECT DATE_SUB('2023-07-15', INTERVAL 1 MONTH);

Hãy cùng phân tích chúng với một số ví dụ thực tế!

H3: Làm việc với CURRENT_DATE() và CURRENT_TIMESTAMP()

Những hàm này rất hữu ích cho việc ghi lại và theo dõi:

INSERT INTO logs (log_message, log_timestamp)
VALUES ('Hoàn thành sao lưu hàng ngày', CURRENT_TIMESTAMP());

Truy vấn này chèn một mục ghi lại với ngày và giờ hiện tại. Nó giống như có một dấu thời gian tự động cho dữ liệu của bạn!

H3: Tách các phần của ngày

Thường xuyên, bạn sẽ cần làm việc với các phần cụ thể của ngày:

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;

Truy vấn này lấy ra các sự kiện và phân chia ngày của chúng thành năm, tháng và ngày. Nó rất phù hợp để tổ chức sự kiện theo tháng hoặc năm!

H3: Tính toán sự khác biệt giữa các ngày

DATEDIFF() là hàm bạn sẽ sử dụng để tìm số ngày giữa hai ngày:

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

Truy vấn này tính toán số ngày đã trôi qua kể từ mỗi sự kiện. Nó rất hữu ích cho việc theo dõi kỷ niệm hoặc tính toán thời gian!

H3: Thêm và bớt thời gian

Nếu bạn cần lên lịch điều gì đó cho tuần tới hoặc tháng trước, DATE_ADD() và DATE_SUB() sẽ giúp bạn:

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;

Truy vấn này hiển thị ngày sự kiện gốc, cùng với ngày một tuần trong tương lai và một tháng trong quá khứ. Nó rất phù hợp cho việc lên lịch sự kiện định kỳ!

Ứng dụng thực tế

Bây giờ chúng ta đã bao gồm các基础知识, hãy nhìn vào một số tình huống thực tế mà các hàm này tỏa sáng:

H3: Nhắc nhở sinh nhật

Nhớ lại học sinh của tôi với ứng dụng nhắc nhở sinh nhật? Đây là cách bạn có thể truy vấn các sinh nhật sắp tới:

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;

Truy vấn phức tạp này thực sự làm điều đơn giản: nó tìm tất cả người dùng whose birthdays are coming up in the next 30 days. Đây là một ví dụ tuyệt vời về việc kết hợp nhiều hàm ngày để đạt được một mục tiêu cụ thể.

H3: Tạo báo cáo

Hàm ngày rất hữu ích cho việc tạo báo cáo. Đây là một truy vấn có thể được sử dụng trong báo cáo bán hàng:

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;

Truy vấn này tóm tắt các đơn hàng và doanh số theo năm và tháng, cung cấp một cái nhìn rõ ràng về hiệu suất kinh doanh theo thời gian.

Kết luận

Chúc mừng! Bạn đã迈出了学习 SQL 日期函数的第一步。这些强大的工具可以帮助您轻松管理基于时间的数据,无论您是在构建提醒应用程序、生成报告还是分析历史趋势。

记住,熟能生巧。尝试在您自己的项目中尝试这些函数。您可能会惊讶于您多久就会用到它们!

在我们结束之前,这里有一点 SQL 幽默:为什么数据库管理员喜欢日期函数? 因为他们总是知道现在是什么时间!(我知道,我知道,但嘿,我们计算机老师得试试,对吧?)

继续编码,保持好奇心,别忘了在数据冒险中玩得开心!

Credits: Image by storyset