Vấn đề: Tính ngày mới bằng cách cộng khoảng thời gian (interval) vào cột ngày
Cần thêm 45 ngày vào cột DueTime (DATETIME) và hiển thị kết quả trong cột ManyDays.
Giải pháp: Hàm DATE_ADD()
Cú pháp: DATE_ADD(date, INTERVAL expr unit).
1. Tạo bảng và dữ liệu
CREATE TABLE DemoTable (DueTime DATETIME);
INSERT INTO DemoTable VALUES
('2017-10-21'), ('2019-12-14'), ('2018-11-26'), ('2014-06-16');
2. Truy vấn cộng 45 ngày
SELECT DueTime, DATE_ADD(DueTime, INTERVAL 45 DAY) AS ManyDays
FROM DemoTable;
3. Kết quả
+---------------------+---------------------+
| DueTime | ManyDays |
+---------------------+---------------------+
| 2017-10-21 00:00:00 | 2017-12-05 00:00:00 |
| 2019-12-14 00:00:00 | 2020-01-28 00:00:00 |
| 2018-11-26 00:00:00 | 2019-01-10 00:00:00 |
| 2014-06-16 00:00:00 | 2014-07-31 00:00:00 |
+---------------------+---------------------+
Các đơn vị INTERVAL phổ biến
DAY,WEEK,MONTH,YEARHOUR,MINUTE,SECONDQUARTER(quý),MICROSECOND- Kết hợp:
INTERVAL '1 12' DAY_HOUR(1 ngày 12 giờ)
Hàm liên quan
DATE_SUB(date, INTERVAL ...)– Trừ khoảng thời gian.ADDDATE(date, INTERVAL ...)– Alias của DATE_ADD.SUBDATE(date, INTERVAL ...)– Alias của DATE_SUB.DATEDIFF(date1, date2)– Số ngày chênh lệch (date1 - date2).
Lưu ý
DATE_ADDtrả vềDATETIMEnếu input là DATETIME/TIMESTAMP, trả vềDATEnếu input là DATE.- Tự động xử lý ngày cuối tháng, năm nhuận.
- Có thể dùng trực tiếp trong
WHERE:WHERE DueTime > DATE_ADD(NOW(), INTERVAL 30 DAY).