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

Cập nhật cột kiểu DATE trong MySQL: Cộng/trừ ngày, tháng, năm

Để 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ápVí dụ
GiâyINTERVAL n SECONDDATE_ADD(dt, INTERVAL 30 SECOND)
PhútINTERVAL n MINUTEDATE_ADD(dt, INTERVAL 45 MINUTE)
GiờINTERVAL n HOURDATE_SUB(dt, INTERVAL 2 HOUR)
NgàyINTERVAL n DAYDATE_ADD(dt, INTERVAL 7 DAY)
TuầnINTERVAL n WEEKDATE_ADD(dt, INTERVAL 1 WEEK)
ThángINTERVAL n MONTHDATE_SUB(dt, INTERVAL 3 MONTH)
QuýINTERVAL n QUARTERDATE_ADD(dt, INTERVAL 1 QUARTER)
NămINTERVAL n YEARDATE_ADD(dt, INTERVAL 1 YEAR)
Kết hợpINTERVAL '1 12' DAY_HOUR1 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_SUB hoạ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();