Giới thiệu
Sử dụng hàm DATE_ADD(date, INTERVAL expr unit) hoặc toán tử + INTERVAL để cộng/trừ khoảng thời gian vào ngày tháng.
1. Tạo bảng và dữ liệu
mysql> create table DemoTable (
-> DueDate date
-> );
Query OK, 0 rows affected (2.11 sec)
mysql> insert into DemoTable values('2019-01-21');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2018-12-31');
Query OK, 1 row affected (0.47 sec)
mysql> insert into DemoTable values('2018-12-30');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values('2017-02-26');
Query OK, 1 row affected (0.47 sec)
2. Dữ liệu gốc
mysql> select *from DemoTable;
+------------+ | DueDate | +------------+ | 2019-01-21 | | 2018-12-31 | | 2018-12-30 | | 2017-02-26 | +------------+ 4 rows in set (0.00 sec)
3. Cập nhật cộng 1 ngày
mysql> update DemoTable
-> set DueDate = date_add(DueDate, interval 1 day);
Query OK, 4 rows affected (0.21 sec)
Rows matched: 4 Changed: 4 Warnings: 0
Cách viết tương đương:
SET DueDate = DueDate + INTERVAL 1 DAY; SET DueDate = DATE_ADD(DueDate, INTERVAL 1 DAY);
4. Kết quả
mysql> select *from DemoTable;
+------------+ | DueDate | +------------+ | 2019-01-22 | | 2019-01-01 | | 2018-12-31 | | 2017-02-27 | +------------+ 4 rows in set (0.00 sec)
Xử lý đúng ngày cuối tháng/năm: MySQL tự động xử lý ngày 31/12 + 1 ngày = 1/1 năm sau, 30/4 + 1 ngày = 1/5, năm nhuận...
Các INTERVAL unit phổ biến:
INTERVAL 1 DAY,INTERVAL 3 HOUR,INTERVAL 30 MINUTEINTERVAL 1 MONTH,INTERVAL 1 YEARINTERVAL '1 12:30:00' DAY_SECOND(kết hợp ngày + thời gian)
Lưu ý: DATE_ADD trả về DATE nếu đầu vào DATE, DATETIME nếu đầu vào DATETIME.