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

MySQL: อัปเดตเฉพาะเดือนในคอลัมน์ DATE (DATE_ADD + MONTH)

การอัปเดตเดือนโดยใช้ 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) ปรับเดือนได้ จัดการข้ามปีอัตโนมัติ