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

Thay đổi năm của cột DATE trong MySQL (từ 2020 sang 2011)

Để thay đổi năm của các giá trị ngày (ví dụ: từ 2020 sang 2011), bạn dùng DATE_SUB() hoặc SUBDATE() với INTERVAL 9 YEAR (khoảng cách 9 năm).

Cú pháp

UPDATE ten_bang 
SET ten_cot_ngay = DATE_SUB(ten_cot_ngay, INTERVAL 9 YEAR);
-- Hoặc
UPDATE ten_bang 
SET ten_cot_ngay = SUBDATE(ten_cot_ngay, INTERVAL 9 YEAR);

Ví dụ minh họa

1. Tạo bảng

CREATE TABLE ChangeYearFrom2020To2011 (
    Id INT NOT NULL AUTO_INCREMENT,
    ExpiryDate DATE,
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu (tất cả năm 2020)

INSERT INTO ChangeYearFrom2020To2011(ExpiryDate) VALUES
('2020-09-12'), ('2020-12-21'), ('2020-01-29'),
('2020-06-30'), ('2020-12-31');

3. Xem dữ liệu gốc

SELECT * FROM ChangeYearFrom2020To2011;

Kết quả:

+----+------------+
| Id | ExpiryDate |
+----+------------+
| 1  | 2020-09-12 |
| 2  | 2020-12-21 |
| 3  | 2020-01-29 |
| 4  | 2020-06-30 |
| 5  | 2020-12-31 |
+----+------------+

4. Cập nhật: Trừ 9 năm (2020 → 2011)

UPDATE ChangeYearFrom2020To2011 
SET ExpiryDate = SUBDATE(ExpiryDate, INTERVAL 9 YEAR);

Kết quả: Query OK, 5 rows affected

5. Kiểm tra sau cập nhật

SELECT * FROM ChangeYearFrom2020To2011;

Kết quả:

+----+------------+
| Id | ExpiryDate |
+----+------------+
| 1  | 2011-09-12 |
| 2  | 2011-12-21 |
| 3  | 2011-01-29 |
| 4  | 2011-06-30 |
| 5  | 2011-12-31 |
+----+------------+

Các cách thay đổi năm khác

Cách 1: DATE_ADD với INTERVAL âm

UPDATE bang SET ngay = DATE_ADD(ngay, INTERVAL -9 YEAR);

Cách 2: DATE_FORMAT + STR_TO_DATE (tách năm, ghép lại)

UPDATE bang 
SET ngay = STR_TO_DATE(
    CONCAT('2011-', DATE_FORMAT(ngay, '%m-%d')), 
    '%Y-%m-%d');

Cách 3: Cập nhật có điều kiện (chỉ năm 2020)

UPDATE bang 
SET ngay = DATE_SUB(ngay, INTERVAL 9 YEAR)
WHERE YEAR(ngay) = 2020;

Bảng INTERVAL unit cho năm

UnitVí dụ
YEARINTERVAL 1 YEAR
QUARTERINTERVAL 1 QUARTER (3 tháng)
MONTHINTERVAL 1 MONTH
WEEKINTERVAL 1 WEEK
DAYINTERVAL 1 DAY

⚠️ Lưu ý quan trọng

  • Backup trước khi UPDATE hàng loạt: CREATE TABLE bang_backup AS SELECT * FROM bang;
  • Kiểm tra trước bằng SELECT: SELECT ngay, DATE_SUB(ngay, INTERVAL 9 YEAR) FROM bang;
  • Xử lý ngày 29/02 năm nhuận: DATE_SUB('2020-02-29', INTERVAL 1 YEAR) → 2019-02-28 (MySQL tự điều chỉnh)
  • Dùng transaction: START TRANSACTION; UPDATE ...; COMMIT;/ROLLBACK;
  • Index trên cột ngày vẫn hoạt động sau UPDATE