Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เปลี่ยนปีของวันที่จาก 2020 เป็น 2011 ใน MySQL (ลบ 9 ปี)

การลบปีออกจากวันที่ด้วย SUBDATE และ INTERVAL

ใช้ SUBDATE() (หรือ DATE_SUB()) กับ INTERVAL 9 YEAR เพื่อลดปีลง 9 ปี (2020 → 2011)

ไวยากรณ์

UPDATE yourTableName 
SET yourDateColumn = SUBDATE(yourDateColumn, INTERVAL 9 YEAR);

ตัวอย่างการใช้งาน

สร้างตาราง:

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

เพิ่มข้อมูลปี 2020:

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

ลบ 9 ปี:

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

ผลลัพธ์ (กลายเป็นปี 2011):

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

ฟังก์ชันที่เทียบเท่า

-- ทั้งคู่นี้ทำงานเหมือนกัน
SUBDATE(date, INTERVAL 9 YEAR)
DATE_SUB(date, INTERVAL 9 YEAR)
date - INTERVAL 9 YEAR  -- shorthand

กรณีพิเศษ: วันที่ 29 กุมภาพันธ์ (Leap Year)

-- 2020-02-29 (leap year) - 9 year = 2011-02-28 (ไม่ใช่ leap year)
SELECT SUBDATE('2020-02-29', INTERVAL 9 YEAR); -- 2011-02-28

MySQL จัดการอัตโนมัติโดยปรับเป็นวันที่สุดท้ายของเดือน

การเปลี่ยนปีเฉพาะ (ไม่ใช่ลบช่วงเวลา)

หากต้องการเปลี่ยนปีเป็นปีเฉพาะ (ไม่ใช่ลบ n ปี):

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

คำแนะนำ

  • ทดสอบด้วย SELECT ก่อน UPDATE จริง
  • Backup ข้อมูลก่อนรัน UPDATE จำนวนมาก
  • พิจารณา Timezone หากคอลัมน์เป็น TIMESTAMP