การอัปเดตเดือนโดยใช้ DATE_ADD และ MONTH()
ใช้ WHERE MONTH(date_col) = 1 กรองเดือนมกราคม แล้ว DATE_ADD(date_col, INTERVAL -1 MONTH) ลบ 1 เดือน (กลายเป็น ธันวาคมปีก่อน)
ตัวอย่าง
mysql> create table DemoTable861(AdmissionDate date);
Query OK, 0 rows affected (1.22 sec)
mysql> insert into DemoTable861 values('2019-01-21');
mysql> insert into DemoTable861 values('2018-01-01');
mysql> insert into DemoTable861 values('2016-01-02');
mysql> insert into DemoTable861 values('2018-01-14');
คำสั่ง UPDATE (ลบ 1 เดือนจากวันที่ในเดือนมกราคม)
mysql> update DemoTable861
set AdmissionDate = date_add(AdmissionDate, INTERVAL -1 MONTH)
where MONTH(AdmissionDate) = 1;
Query OK, 4 rows affected (0.42 sec)
ผลลัพธ์ (กลายเป็น ธันวาคมปีก่อนหน้า)
+---------------+
| AdmissionDate |
+---------------+
| 2018-12-21 |
| 2017-12-01 |
| 2015-12-02 |
| 2017-12-14 |
+---------------+
ฟังก์ชันวันที่อื่นๆ สำหรับอัปเดตบางส่วน
-- เปลี่ยนปี (เก็บเดือน/วันเดิม)
UPDATE t SET date_col = DATE_ADD(date_col, INTERVAL 1 YEAR);
-- เปลี่ยนวัน (เก็บเดือน/ปีเดิม) - ต้องระวังวันที่ไม่มีในเดือนนั้น
UPDATE t SET date_col = DATE_ADD(date_col, INTERVAL 1 DAY);
-- ตั้งค่าเดือนโดยตรง (MySQL 8.0+)
UPDATE t SET date_col = MAKEDATE(YEAR(date_col), 1) + INTERVAL (6-1) MONTH + INTERVAL (DAY(date_col)-1) DAY;
สรุป
ใช้ WHERE MONTH(date) = n กรองเดือน แล้ว DATE_ADD(date, INTERVAL +/- m MONTH) ปรับเดือนได้ จัดการข้ามปีอัตโนมัติ