Làm việc với thời gian và ngày tháng trong cơ sở dữ liệu có thể là một phần phức tạp của lập trình, nhưng biết cách sử dụng các hàm đúng đắn sẽ giúp đơn giản hóa quá trình này. Một trong những hàm hữu ích của MySQL là SUBDATE(), cho phép bạn dễ dàng trừ đi một khoảng thời gian từ một ngày cụ thể.
Cấu Trúc Cơ Bản của SUBDATE()
Cấu trúc cơ bản của hàm này rất đơn giản và dễ nhớ. Nó có thể được sử dụng theo hai cách chính, bao gồm việc sử dụng một chuỗi định dạng hoặc sử dụng các khoảng thời gian ngày tháng cụ thể.
Dạng Sử Dụng Chuỗi Định Dạng
SUBDATE(date, INTERVAL expr unit)
Ví dụ:
SELECT SUBDATE('2023-12-31', INTERVAL 10 DAY);
Kết quả sẽ là:
2023-12-21
Dạng Sử Dụng Ngày Thực
SUBDATE(date, days)
Ví dụ:
SELECT SUBDATE('2023-12-31', 10);
Kết quả sẽ cũng là:
2023-12-21
Ứng Dụng Thực Tiễn
Trừ Ngày Từ Ngày Hiện Tại
Một ứng dụng phổ biến của hàm này là trừ ngày tháng từ ngày hiện tại. Bạn có thể dễ dàng thực hiện điều này bằng cách sử dụng hàm CURDATE()
.
SELECT SUBDATE(CURDATE(), INTERVAL 7 DAY);
Lệnh trên sẽ trả về một ngày là 7 ngày trước ngày hiện tại.
Sử Dụng Trong Mệnh Đề WHERE
Hàm này cũng có thể được sử dụng trong mệnh đề WHERE để lọc dữ liệu dựa trên một khoảng thời gian cụ thể.
Ví dụ, nếu bạn muốn tìm tất cả các đơn hàng được tạo ra trong 30 ngày qua, bạn có thể sử dụng câu lệnh sau:
SELECT *
FROM orders
WHERE order_date >= SUBDATE(CURDATE(), INTERVAL 30 DAY);
Lệnh này sẽ trả về tất cả các đơn hàng đã được đặt trong vòng 30 ngày qua tính từ ngày hiện tại.
Các Đơn Vị Thời Gian Hỗ Trợ
Khi sử dụng INTERVAL
, bạn có thể chỉ định nhiều đơn vị thời gian khác nhau. Các đơn vị này bao gồm:
- NANOSECOND
- MICROSECOND
- SECOND
- MINUTE
- HOUR
- DAY
- WEEK
- MONTH
- QUARTER
- YEAR
Ví dụ Sử Dụng Các Đơn Vị Khác Nhau
Dưới đây là một số ví dụ cho thấy cách các đơn vị khác nhau có thể được áp dụng:
- Trừ đi một tháng:
SELECT SUBDATE('2023-12-31', INTERVAL 1 MONTH);
Kết quả:
2023-11-30
- Trừ đi một năm:
SELECT SUBDATE('2023-12-31', INTERVAL 1 YEAR);
Kết quả:
2022-12-31
Kết Hợp Với Các Hàm Khác
SUBDATE()
cũng có thể kết hợp với các hàm khác của MySQL để tạo ra các truy vấn phức tạp hơn. Ví dụ:
- Trừ đi 10 ngày và trả về định dạng ngày tháng năm:
SELECT DATE_FORMAT(SUBDATE('2023-12-31', 10), '%d-%m-%Y') AS formatted_date;
Kết quả:
21-12-2023
Điều Cần Lưu Ý
Mặc dù SUBDATE()
rất mạnh mẽ và linh hoạt, việc sử dụng nó trong các truy vấn lớn có thể gây ra vấn đề hiệu suất, đặc biệt là khi làm việc với các bảng dữ liệu rất lớn. Vì thế, nắm rõ và sử dụng chỉ mục (indexing) là rất quan trọng khi cần tối ưu hóa các truy vấn có sử dụng SUBDATE()
.
Kết Luận
Hàm này là một công cụ mạnh mẽ và linh hoạt không những giúp bạn quản lý và xử lý ngày tháng một cách hiệu quả mà còn tích hợp tốt với các mệnh đề truy vấn khác. Hiểu và nắm vững cách sử dụng sẽ giúp bạn tối ưu hóa các thao tác với dữ liệu trong MySQL, từ đó cải thiện hiệu suất và tính chính xác của ứng dụng hoặc hệ thống mà bạn đang phát triển.
Comments