Để cập nhật cột kiểu DATE (hoặc DATETIME) bằng cách cộng hoặc trừ một khoảng thời gian, MySQL cung cấp hàm DATE_ADD() và DATE_SUB() với đơn vị INTERVAL.
Ví dụ minh họa
Tạo bảng ngày tham gia:
mysql> CREATE TABLE DemoTable1451 (
JoiningDate DATE
);
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1451 VALUES ('2019-07-21');
mysql> INSERT INTO DemoTable1451 VALUES ('2018-01-31');
mysql> INSERT INTO DemoTable1451 VALUES ('2017-06-01');
Dữ liệu ban đầu:
mysql> SELECT * FROM DemoTable1451;
+-------------+ | JoiningDate | +-------------+ | 2019-07-21 | | 2018-01-31 | | 2017-06-01 | +-------------+
Cập nhật: Cộng 1 năm cho tất cả ngày tham gia
mysql> UPDATE DemoTable1451
SET JoiningDate = DATE_ADD(JoiningDate, INTERVAL 1 YEAR);
Kết quả:
mysql> SELECT * FROM DemoTable1451;
+-------------+ | JoiningDate | +-------------+ | 2020-07-21 | | 2019-01-31 | | 2018-06-01 | +-------------+
Các đơn vị INTERVAL phổ biến
| Đơn vị | Cú pháp | Ví dụ |
|---|---|---|
| Giây | INTERVAL n SECOND | DATE_ADD(dt, INTERVAL 30 SECOND) |
| Phút | INTERVAL n MINUTE | DATE_ADD(dt, INTERVAL 45 MINUTE) |
| Giờ | INTERVAL n HOUR | DATE_SUB(dt, INTERVAL 2 HOUR) |
| Ngày | INTERVAL n DAY | DATE_ADD(dt, INTERVAL 7 DAY) |
| Tuần | INTERVAL n WEEK | DATE_ADD(dt, INTERVAL 1 WEEK) |
| Tháng | INTERVAL n MONTH | DATE_SUB(dt, INTERVAL 3 MONTH) |
| Quý | INTERVAL n QUARTER | DATE_ADD(dt, INTERVAL 1 QUARTER) |
| Năm | INTERVAL n YEAR | DATE_ADD(dt, INTERVAL 1 YEAR) |
| Kết hợp | INTERVAL '1 12' DAY_HOUR | 1 ngày 12 giờ |
Cú pháp thay thế: Toán tử + / - (MySQL extension)
-- Tương đương DATE_ADD UPDATE DemoTable1451 SET JoiningDate = JoiningDate + INTERVAL 1 YEAR; -- Tương đương DATE_SUB UPDATE DemoTable1451 SET JoiningDate = JoiningDate - INTERVAL 6 MONTH;
Lưu ý quan trọng
DATE_ADD/DATE_SUBhoạt động trên cảDATE,DATETIME,TIMESTAMP.- Kết quả kiểu dữ liệu theo kiểu đầu vào (DATE → DATE, DATETIME → DATETIME).
- Xử lý tự động ngày cuối tháng:
'2019-01-31' + INTERVAL 1 MONTH='2019-02-28'(không phải 31). - Năm nhuận:
'2020-02-29' + INTERVAL 1 YEAR='2021-02-28'.
Ví dụ thực tế: Gia hạn hợp đồng 1 năm
UPDATE Contracts SET ExpiryDate = DATE_ADD(ExpiryDate, INTERVAL 1 YEAR) WHERE Status = 'Active' AND ExpiryDate < CURDATE();