×

Trừ ngày từ ngày hiện tại với hàm DATE_SUB() trong MySQL

Làm việc với dữ liệu thời gian trong MySQL là một kỹ năng quan trọng đối với các nhà phát triển và quản trị viên cơ sở dữ liệu. Một trong những chức năng hữu ích nhất cho việc thao tác ngày tháng là hàm DATE_SUB(). Hàm này cho phép bạn trừ đi một khoảng thời gian nhất định từ một ngày cụ thể.

Giới thiệu về hàm DATE_SUB()

Hàm này được sử dụng để trừ một khoảng thời gian từ một ngày, trả về kết quả là một giá trị thời gian mới. Cú pháp cơ bản của nó như sau:

DATE_SUB(date, INTERVAL expr unit)
  • date là ngày gốc mà bạn muốn trừ khoảng thời gian.
  • expr là giá trị số chỉ khoảng thời gian mà bạn muốn trừ.
  • unit là đơn vị của khoảng thời gian đó, ví dụ như SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR, v.v.

Ví dụ sử dụng

Giả sử bạn có một bảng dữ liệu về các đơn hàng và bạn muốn lấy tất cả các đơn hàng đã được đặt từ hôm nay đến một tuần trước. Câu lệnh SQL dưới đây làm điều đó:

SELECT * FROM orders
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 7 DAY);

Trong ví dụ này:

  • NOW() trả về thời gian hiện tại của máy chủ.
  • DATE_SUB(NOW(), INTERVAL 7 DAY) sẽ trừ đi 7 ngày từ thời điểm hiện tại và trả về ngày một tuần trước.

Một số trường hợp sử dụng khác

Trừ đi tháng:

SELECT DATE_SUB('2023-10-10', INTERVAL 1 MONTH);

Kết quả này sẽ trả về: '2023-09-10'.

Trừ đi năm:

SELECT DATE_SUB('2023-10-10', INTERVAL 1 YEAR);

Kết quả sẽ là: '2022-10-10'.

Kết hợp hàm với cột dữ liệu:

Nếu bạn có một bảng employees với một cột hire_date và bạn muốn xem tất cả nhân viên đã làm việc hơn 5 năm, bạn có thể sử dụng:

SELECT * FROM employees
WHERE hire_date <= DATE_SUB(CURDATE(), INTERVAL 5 YEAR);
  • CURDATE() sẽ trả về ngày hiện tại mà không có thời gian trong ngày.
  • DATE_SUB(CURDATE(), INTERVAL 5 YEAR) sẽ trừ đi 5 năm từ ngày hiện tại.

Sử dụng với các đơn vị thời gian khác

Trừ đi giờ:

SELECT DATE_SUB('2023-10-10 12:00:00', INTERVAL 5 HOUR);

Kết quả sẽ là: '2023-10-10 07:00:00'.

Trừ đi phút:

SELECT DATE_SUB('2023-10-10 12:00:00', INTERVAL 30 MINUTE);

Kết quả này sẽ là: '2023-10-10 11:30:00'.

Lưu ý khi sử dụng

  1. Đảm bảo rằng định dạng của ngày đầu vào là hợp lệ.
  2. Đơn vị thời gian phải được chỉ định rõ ràng, tránh nhầm lẫn.
  3. Kết quả của hàm này có thể thay đổi dựa trên múi giờ của máy chủ cơ sở dữ liệu nếu sử dụng các hàm liên quan đến thời gian hiện tại như NOW() hay CURDATE().

Kết luận

Hàm DATE_SUB() trong MySQL là một công cụ mạnh mẽ và linh hoạt cho phép bạn dễ dàng thao tác với dữ liệu thời gian. Việc sử dụng đúng cách hàm này giúp bạn tạo ra các truy vấn mạnh mẽ và hiệu quả hơn, từ việc tìm kiếm dữ liệu trong một khoảng thời gian nhất định đến việc thực hiện các phép tính phức tạp liên quan đến ngày giờ.

Comments