MySQL Date and Time Functions: A Beginner's Guide

Xin chào các bạn未来数据库大师!Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị qua thế giới của các hàm ngày và giờ trong MySQL. Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn, và chúng ta sẽ cùng nhau bước từng bước. Cuối cùng của bài hướng dẫn này, bạn sẽ có thể manipulates ngày và giờ như một chuyên gia!

MySQL - Date and Time Functions

Why Date and Time Functions Matter

Trước khi chúng ta bắt đầu, hãy để tôi chia sẻ một câu chuyện nhanh. Cách đây vài năm, một trong những học sinh của tôi đ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á các hàm ngày của MySQL. Ngay lập tức, ứng dụng của anh ấy có thể thông báo cho người dùng biết còn bao nhiêu ngày nữa là sinh nhật của bạn bè họ. Đó giống như phép màu! Đó là sức mạnh của việc thành thạo các hàm này.

Getting Started: The Current Date and Time

Hãy bắt đầu từ những điều cơ bản. MySQL cung cấp nhiều hàm để lấy ngày và giờ hiện tại. Dưới đây là những hàm phổ biến nhất:

Hàm Mô tả Output ví dụ
NOW() Ngày và giờ hiện tại 2023-05-15 14:30:00
CURDATE() Ngày hiện tại 2023-05-15
CURTIME() Giờ hiện tại 14:30:00

Hãy xem chúng trong hành động:

SELECT NOW(), CURDATE(), CURTIME();

Truy vấn này sẽ trả về ngày và giờ hiện tại, chỉ ngày, và chỉ giờ. Rất tuyệt vời phải không?

Understanding the Output

Hàm NOW() trả về một giá trị datetime, bao gồm cả ngày và giờ. CURDATE() cho bạn chỉ ngày ở định dạng 'YYYY-MM-DD', trong khi CURTIME() cung cấp giờ ở định dạng 'HH:MM:SS'.

Extracting Parts of Dates and Times

Bây giờ, giả sử bạn có một giá trị datetime và bạn muốn trích xuất các phần cụ thể của nó. MySQL có bạn covered với các hàm tiện ích này:

Hàm Mô tả Sử dụng ví dụ Output ví dụ
YEAR() Trích xuất năm YEAR('2023-05-15') 2023
MONTH() Trích xuất tháng MONTH('2023-05-15') 5
DAY() Trích xuất ngày DAY('2023-05-15') 15
HOUR() Trích xuất giờ HOUR('14:30:00') 14
MINUTE() Trích xuất phút MINUTE('14:30:00') 30
SECOND() Trích xuất giây SECOND('14:30:45') 45

Hãy thử chúng ra:

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;

Truy vấn này sẽ gọn gàng trích xuất mỗi phần của ngày và giờ cho chúng ta.

Real-World Application

Hãy tưởng tượng bạn đang xây dựng một trang web hiển thị sinh nhật của người dùng. Bạn có thể sử dụng các hàm MONTH() và DAY() để trích xuất chỉ tháng và ngày từ một sinh nhật lưu trữ, bỏ qua năm. Bằng cách này, bạn có thể chúc mừng người dùng vào sinh nhật của họ mà không tiết lộ tuổi của họ!

Date Arithmetic: Adding and Subtracting

Một trong những điều thú vị nhất về các hàm ngày của MySQL là bạn có thể thực hiện toán học với ngày. Hãy nhìn vào một số hàm cho điều này:

Hàm Mô tả Sử dụng ví dụ
DATE_ADD() Thêm một khoảng thời gian vào ngày DATE_ADD('2023-05-15', INTERVAL 1 DAY)
DATE_SUB() Trừ một khoảng thời gian khỏi ngày DATE_SUB('2023-05-15', INTERVAL 1 MONTH)
DATEDIFF() Tìm sự khác biệt giữa các ngày DATEDIFF('2023-05-15', '2023-01-01')

Dưới đây là cách chúng ta có thể sử dụng chúng:

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;

Truy vấn này sẽ hiển thị cho chúng ta ngày mai, ngày một tháng trước, và số ngày đã trôi qua kể từ ngày đầu năm.

The Power of Intervals

Trong các hàm DATE_ADD() và DATE_SUB(), chúng ta sử dụng từ khóa INTERVAL. Điều này rất linh hoạt - bạn có thể thêm hoặc bớt năm, tháng, ngày, giờ, phút và thậm chí là giây!

Formatting Dates and Times

Đôi khi, bạn cần hiển thị ngày và giờ theo một định dạng cụ thể. Đó là nơi hàm DATE_FORMAT() trở nên hữu ích:

SELECT DATE_FORMAT('2023-05-15 14:30:00', '%W, %M %d, %Y at %h:%i %p') AS formatted_date;

Điều này sẽ đầu ra: "Monday, May 15, 2023 at 02:30 PM"

Các ký tự % theo sau bởi các chữ cái là các specifier định dạng. Dưới đây là một số specifier phổ biến:

Specifier Mô tả
%W Tên ngày trong tuần đầy đủ
%M Tên tháng đầy đủ
%d Ngày trong tháng (01-31)
%Y Năm bằng 4 chữ số
%h Giờ (01-12)
%i Phút (00-59)
%p AM hoặc PM

Putting It All Together

Hãy kết hợp những gì chúng ta đã học vào một ví dụ thực tế. Hãy tưởng tượng chúng ta đang xây dựng một hệ thống để theo dõi ngày làm việc kỷ niệm của nhân viên:

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;

Truy vấn này thực hiện một số điều:

  1. Tính toán số năm mỗi nhân viên đã làm việc tại công ty.
  2. Xác định ngày kỷ niệm làm việc tiếp theo của họ.
  3. Tính toán số ngày còn lại cho đến ngày kỷ niệm tiếp theo của họ.

Conclusion

Chúc mừng! Bạn đã刚刚迈出进入MySQL日期和时间函数世界的第一步。我们已经覆盖了获取当前日期和时间的基础知识, trích xuất các phần của ngày, thực hiện toán học với ngày, và định dạng ngày để hiển thị.

Nhớ rằng, thực hành làm nên完美。Thử tạo các truy vấn của riêng bạn sử dụng các hàm này. Có thể thử xây dựng ứng dụng nhắc nhở sinh nhật tôi đề cập trước đó! Càng chơi với các hàm này, bạn sẽ càng thoải mái hơn.

Và luôn nhớ: trong thế giới lập trình, mỗi ngày là một cơ hội mới để học và phát triển. Chúc may mắn, các大师 cơ sở dữ liệu tương lai!

Credits: Image by storyset