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

Cách cập nhật datetime từ cột datetime khác trong MySQL


Cú pháp cơ bản

Sử dụng UPDATE kết hợp hàm DATE_ADD() hoặc gán trực tiếp:

UPDATE ten_bang SET cot_moi = DATE_ADD(cot_goc, INTERVAL n DAY) WHERE dieu_kien;

Ví dụ chi tiết

1. Tạo bảng

mysql> CREATE TABLE AddDateTimeWithOther ( 
-> Id INT, 
-> IssueDate DATETIME, 
-> DueDate DATETIME 
-> ); 
Query OK, 0 rows affected (0.69 sec)

2. Chèn dữ liệu (DueDate = IssueDate ± interval)

mysql> INSERT INTO AddDateTimeWithOther VALUES(100, NOW(), DATE_ADD(NOW(), INTERVAL -3 YEAR)); 
Query OK, 1 row affected (0.13 sec) 
mysql> INSERT INTO AddDateTimeWithOther VALUES(101, NOW(), DATE_ADD(NOW(), INTERVAL 2 YEAR)); 
Query OK, 1 row affected (0.20 sec)

3. Dữ liệu ban đầu

mysql> SELECT * FROM AddDateTimeWithOther;
+------+---------------------+---------------------+ 
| Id   | IssueDate           | DueDate             | 
+------+---------------------+---------------------+ 
| 100  | 2018-12-11 17:33:28 | 2015-12-11 17:33:28 | 
| 101  | 2018-12-11 17:33:37 | 2020-12-11 17:33:37 | 
+------+---------------------+---------------------+ 
2 rows in set (0.00 sec)

4. Cập nhật DueDate cho Id=100

mysql> UPDATE AddDateTimeWithOther 
-> SET DueDate = DATE_ADD(NOW(), INTERVAL 1 YEAR) 
-> WHERE Id = 100; 
Query OK, 1 row affected (0.24 sec) 
Rows matched: 1 Changed: 1 Warnings: 0

5. Kết quả sau cập nhật

mysql> SELECT * FROM AddDateTimeWithOther;
+------+---------------------+---------------------+ 
| Id   | IssueDate           | DueDate             | 
+------+---------------------+---------------------+ 
| 100  | 2018-12-11 17:33:28 | 2019-12-11 17:35:03 | 
| 101  | 2018-12-11 17:33:37 | 2020-12-11 17:33:37 | 
+------+---------------------+---------------------+ 
2 rows in set (0.00 sec)

Các đơn vị INTERVAL phổ biến

Đơn vịVí dụMô tả
SECONDINTERVAL 30 SECOND30 giây
MINUTEINTERVAL 45 MINUTE45 phút
HOURINTERVAL 2 HOUR2 giờ
DAYINTERVAL 7 DAY7 ngày
WEEKINTERVAL 1 WEEK1 tuần
MONTHINTERVAL 3 MONTH3 tháng
YEARINTERVAL 1 YEAR1 năm
DAY_HOURINTERVAL '1 12' DAY_HOUR1 ngày 12 giờ

Các hàm xử lý datetime hữu ích

-- Chênh lệch 2 datetime (giây)
SELECT TIMESTAMPDIFF(SECOND, IssueDate, DueDate) FROM ten_bang;

-- Chỉ lấy phần ngày
SELECT DATE(IssueDate) FROM ten_bang;

-- Cộng/trừ trực tiếp
UPDATE ten_bang SET DueDate = IssueDate + INTERVAL 30 DAY;

-- Format hiển thị
SELECT DATE_FORMAT(DueDate, '%d/%m/%Y %H:%i') FROM ten_bang;

Lưu ý

  • NOW() trả về thời điểm thực thi câu lệnh
  • Sử dụng DATE_ADD() / DATE_SUB() cho rõ ràng
  • Index trên cột datetime tăng tốc WHERE/ORDER BY