Giới thiệu
Có thể tính toán giá trị cột (ví dụ: cộng thêm phút/giờ/ngày/tháng/năm) trực tiếp trong câu lệnh INSERT bằng hàm DATE_ADD(), tránh phải UPDATE sau đó.
Ví dụ thực hành
1. Tạo bảng DemoTable816
mysql> CREATE TABLE DemoTable816 (DueDate DATETIME);
2. INSERT với DATE_ADD
mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD(NOW(), INTERVAL 3 MINUTE));
mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD('2018-01-21 00:00:00', INTERVAL 3 HOUR));
mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD('2016-11-11 12:40:00', INTERVAL 3 DAY));
mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD('2018-12-01 11:00:00', INTERVAL 3 MONTH));
mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD('2011-03-21 10:00:00', INTERVAL 3 YEAR));
3. Kết quả
+---------------------+
| DueDate |
+---------------------+
| 2019-08-03 13:08:43 | -- NOW() + 3 phút
| 2018-01-21 03:00:00 | -- + 3 giờ
| 2016-11-14 12:40:00 | -- + 3 ngày
| 2019-03-01 11:00:00 | -- + 3 tháng
| 2014-03-21 10:00:00 | -- + 3 năm
+---------------------+
Các hàm liên quan
DATE_ADD(date, INTERVAL expr unit)— Cộng.DATE_SUB(date, INTERVAL expr unit)— Trừ.ADDDATE()/SUBDATE()— Alias.- Cú pháp ngắn:
date + INTERVAL 3 DAY,date - INTERVAL 1 MONTH.
Ứng dụng thực tế
- Tự động đặt
due_date = DATE_ADD(created_at, INTERVAL 30 DAY)khi tạo hóa đơn. - Tính hạn bảo hành:
warranty_end = DATE_ADD(purchase_date, INTERVAL 1 YEAR). - Lịch nhắc nhở:
remind_at = DATE_ADD(event_time, INTERVAL -1 HOUR).
Lưu ý
NOW()được đánh giá một lần cho cả câu lệnh (tất cả hàng INSERT cùng lúc có cùng NOW()).- Dùng
DEFAULT (DATE_ADD(NOW(), INTERVAL 1 DAY))trong định nghĩa cột (MySQL 8.0.13+) để tự động gán khi INSERT không cung cấp giá trị.