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

Thay đổi năm trong cột DATE MySQL

Cập nhật năm (year) cho cột DATE giữ nguyên tháng/ngày

Dùng DATE_FORMAT(cot, 'nam-moi-%m-%d') trong UPDATE để thay đổi năm mà giữ tháng, ngày.

Cú pháp

UPDATE tenBang
SET cotNgay = DATE_FORMAT(cotNgay, '2019-%m-%d');

Ví dụ minh họa

Bảng ChangeYear:

CREATE TABLE ChangeYear (
    id INT NOT NULL AUTO_INCREMENT,
    ArrivalTime DATE,
    PRIMARY KEY (id)
);
INSERT INTO ChangeYear (ArrivalTime) VALUES
(DATE_ADD(NOW(), INTERVAL -2 YEAR)),  -- 2 năm trước
('2012-10-24'), ('2016-03-21'), ('2015-04-24'), (CURDATE());

Dữ liệu ban đầu (giả sử hôm nay 2019-01-07):

+----+-------------+
| id | ArrivalTime |
+----+-------------+
|  1 | 2017-01-07  |
|  2 | 2012-10-24  |
|  3 | 2016-03-21  |
|  4 | 2015-04-24  |
|  5 | 2019-01-07  |
+----+-------------+

Cập nhật tất cả năm thành 2019:

UPDATE ChangeYear
SET ArrivalTime = DATE_FORMAT(ArrivalTime, '2019-%m-%d');

Kết quả

+----+-------------+
| id | ArrivalTime |
+----+-------------+
|  1 | 2019-01-07  |
|  2 | 2019-10-24  |
|  3 | 2019-03-21  |
|  4 | 2019-04-24  |
|  5 | 2019-01-07  |
+----+-------------+

Phương pháp thay thế: DATE_ADD / DATE_SUB

Tính chênh lệch năm rồi cộng/trừ:

UPDATE ChangeYear
SET ArrivalTime = DATE_ADD(ArrivalTime, INTERVAL (2019 - YEAR(ArrivalTime)) YEAR);

Cách này linh hoạt hơn nếu muốn set năm dựa trên năm hiện tại của từng hàng.

Lưu ý

  • DATE_FORMAT trả về STRING, MySQL tự cast ngược thành DATE khi gán vào cột DATE.
  • Ngày 29/2 năm nhuận: Nếu set năm không nhuận, MySQL điều chỉnh thành 28/2 (không lỗi).
  • Có index trên cột DATE → UPDATE sẽ cập nhật index (chi phí ghi).