Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cộng 30 ngày vào cột ngày trong MySQL (ADDDATE, DATE_ADD)

Để 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ầuCú pháp
Cộng 10 ngàyADDDATE(cot, INTERVAL 10 DAY)
Cộng 1 thángADDDATE(cot, INTERVAL 1 MONTH)
Cộng 1 nămADDDATE(cot, INTERVAL 1 YEAR)
Cộng 3 giờADDDATE(cot, INTERVAL 3 HOUR)
Cộng 1 tuầnADDDATE(cot, INTERVAL 1 WEEK)
Trừ 30 ngàyDATE_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ần COALESCE hoặc WHERE cot IS NOT NULL
  • Dùng transaction: START TRANSACTION; UPDATE ...; COMMIT;
  • ADDDATE và DATE_ADD hoà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