Hàm DATE_SUB() cho phép trừ một khoảng thời gian (ngày, tháng, năm, giờ...) từ một giá trị ngày/giờ. Đây là cách chuẩn để thực hiện phép toán ngày tháng trong MySQL.
Cú pháp
DATE_SUB(ngay_gio, INTERVAL gia_tri DON_VI)
Các đơn vị phổ biến: DAY, WEEK, MONTH, YEAR, HOUR, MINUTE, SECOND.
Ví dụ minh họa
Tạo bảng và chèn ngày:
CREATE TABLE DemoTable (AdmissionDate TIMESTAMP);
INSERT INTO DemoTable VALUES
('2019-01-01'), ('2018-12-31'), ('2017-03-13'), ('2019-01-02');
Trừ 1 ngày từ mỗi bản ghi:
SELECT DATE_SUB(AdmissionDate, INTERVAL 1 DAY) AS NgayTruoc FROM DemoTable;
Kết quả
| AdmissionDate (gốc) | NgayTruoc (trừ 1 ngày) |
|---|---|
| 2019-01-01 00:00:00 | 2018-12-31 00:00:00 |
| 2018-12-31 00:00:00 | 2018-12-30 00:00:00 |
| 2017-03-13 00:00:00 | 2017-03-12 00:00:00 |
| 2019-01-02 00:00:00 | 2019-01-01 00:00:00 |
Các biến thể hữu ích
- Trừ 7 ngày:
INTERVAL 7 DAYhoặcINTERVAL 1 WEEK - Trừ 1 tháng:
INTERVAL 1 MONTH - Trừ 1 năm:
INTERVAL 1 YEAR - Cộng ngày (dùng
DATE_ADD):DATE_ADD(ngay, INTERVAL 1 DAY) - Cách viết tắt (chỉ MySQL):
ngay - INTERVAL 1 DAY
Lưu ý: DATE_SUB tự động xử lý chuyển tháng, năm nhuận, v.v. Kết quả giữ nguyên kiểu dữ liệu đầu vào (DATE, DATETIME, TIMESTAMP).