MySQL cho phép cộng/trừ khoảng thời gian (interval) trực tiếp cho cột DATETIME/TIMESTAMP bằng từ khóa INTERVAL. Có thể cộng nhiều đơn vị khác nhau trong một câu lệnh.
Cú pháp
UPDATE ten_bang
SET cot_datetime = cot_datetime
+ INTERVAL 10 YEAR
+ INTERVAL 3 MONTH
+ INTERVAL 22 DAY
+ INTERVAL 10 HOUR
+ INTERVAL 30 MINUTE;
Ví dụ minh họa
Tạo bảng thời gian đến:
mysql> CREATE TABLE DemoTable1509 (ArrivalTime DATETIME);
mysql> INSERT INTO DemoTable1509 VALUES
-> ('2018-01-21 10:20:30'),
-> ('2019-04-01 11:00:00'),
-> ('2015-12-12 05:45:20');
Cập nhật cộng thêm khoảng thời gian phức tạp:
mysql> UPDATE DemoTable1509
-> SET ArrivalTime = ArrivalTime
-> + INTERVAL 10 YEAR
-> + INTERVAL 3 MONTH
-> + INTERVAL 22 DAY
-> + INTERVAL 10 HOUR
-> + INTERVAL 30 MINUTE;
Kết quả:
+---------------------+ | ArrivalTime | +---------------------+ | 2028-05-13 20:50:30 | | 2029-07-23 21:30:00 | | 2026-04-03 16:15:20 | +---------------------+
Các đơn vị INTERVAL hỗ trợ
| Đơn vị | Ví dụ |
|---|---|
| MICROSECOND | INTERVAL 500 MICROSECOND |
| SECOND | INTERVAL 30 SECOND |
| MINUTE | INTERVAL 30 MINUTE |
| HOUR | INTERVAL 10 HOUR |
| DAY | INTERVAL 22 DAY |
| WEEK | INTERVAL 2 WEEK |
| MONTH | INTERVAL 3 MONTH |
| QUARTER | INTERVAL 1 QUARTER |
| YEAR | INTERVAL 10 YEAR |
| Kết hợp | INTERVAL '1 12:30:05' DAY_SECOND |
Lưu ý
- Cộng INTERVAL tự động xử lý ngày tháng (ví dụ: 31/1 + 1 tháng = 28/2 hoặc 29/2 năm nhuận).
- Với
TIMESTAMP, chú ý múi giờ (timezone) – INTERVAL tính theo UTC rồi chuyển về session timezone. - Để trừ: dùng
- INTERVAL ...hoặcDATE_SUB(cot, INTERVAL ...). - Hiệu năng: UPDATE hàng loạt không dùng index trên cột datetime (vì giá trị mới không liên quan giá trị cũ). Cân nhắc chia batch nếu bảng lớn.