Để cộng một khoảng thời gian (30 ngày) vào cột kiểu DATE hoặc DATETIME cho tất cả hàng, dùng UPDATE kết hợp ADDDATE() hoặc DATE_ADD().
Cú pháp
UPDATE ten_bang
SET ten_cot_ngay = ADDDATE(ten_cot_ngay, INTERVAL 30 DAY);
-- Hoặc
UPDATE ten_bang
SET ten_cot_ngay = DATE_ADD(ten_cot_ngay, INTERVAL 30 DAY);
Ví dụ minh họa
1. Tạo bảng
CREATE TABLE Add30DayDemo (
Id INT NOT NULL AUTO_INCREMENT,
ShippingDate DATE,
PRIMARY KEY(Id)
);
2. Chèn dữ liệu
INSERT INTO Add30DayDemo(ShippingDate) VALUES
('2019-02-04'), ('2018-11-15'), ('2013-05-18'),
('2017-08-25'), ('2016-03-01'), ('2015-09-03');
3. Xem dữ liệu gốc
SELECT * FROM Add30DayDemo;
Kết quả:
+----+--------------+
| Id | ShippingDate |
+----+--------------+
| 1 | 2019-02-04 |
| 2 | 2018-11-15 |
| 3 | 2013-05-18 |
| 4 | 2017-08-25 |
| 5 | 2016-03-01 |
| 6 | 2015-09-03 |
+----+--------------+
4. Cộng 30 ngày
UPDATE Add30DayDemo
SET ShippingDate = ADDDATE(ShippingDate, INTERVAL 30 DAY);
Kết quả: Query OK, 6 rows affected (0.44 sec) Rows matched: 6 Changed: 6 Warnings: 0
5. Kiểm tra sau cập nhật
SELECT * FROM Add30DayDemo;
Kết quả:
+----+--------------+
| Id | ShippingDate |
+----+--------------+
| 1 | 2019-03-06 |
| 2 | 2018-12-15 |
| 3 | 2013-06-17 |
| 4 | 2017-09-24 |
| 5 | 2016-03-31 |
| 6 | 2015-10-03 |
+----+--------------+
Các biến thể cộng thời gian
| Yêu cầu | Cú pháp |
|---|---|
| Cộng 10 ngày | ADDDATE(cot, INTERVAL 10 DAY) |
| Cộng 1 tháng | ADDDATE(cot, INTERVAL 1 MONTH) |
| Cộng 1 năm | ADDDATE(cot, INTERVAL 1 YEAR) |
| Cộng 3 giờ | ADDDATE(cot, INTERVAL 3 HOUR) |
| Cộng 1 tuần | ADDDATE(cot, INTERVAL 1 WEEK) |
| Trừ 30 ngày | DATE_SUB(cot, INTERVAL 30 DAY) hoặc SUBDATE(cot, INTERVAL 30 DAY) |
Cập nhật có điều kiện
-- Chỉ cộng 30 ngày cho hàng chưa shipped
UPDATE orders
SET expected_date = ADDDATE(expected_date, INTERVAL 30 DAY)
WHERE status = 'pending';
⚠️ Lưu ý quan trọng
- Không có WHERE = cập nhật TẤT CẢ hàng - Cẩn thận trên production
- Backup trước:
CREATE TABLE bang_backup AS SELECT * FROM bang; - Xử lý NULL:
ADDDATE(NULL, ...) = NULL→ CầnCOALESCEhoặcWHERE cot IS NOT NULL - Dùng transaction:
START TRANSACTION; UPDATE ...; COMMIT; ADDDATEvàDATE_ADDhoàn toàn tương đương (alias)
Kiểm tra trước khi chạy (Best Practice)
-- Xem trước kết quả
SELECT Id, ShippingDate, ADDDATE(ShippingDate, INTERVAL 30 DAY) AS NewDate
FROM Add30DayDemo;
-- Sau đó mới chạy UPDATE