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

ลบวันที่ที่เก่ากว่า 30 วันจากวันที่อ้างอิงใน MySQL ด้วย DELETE และ INTERVAL

การลบบันทึกที่มีวันที่เก่ากว่าวันที่อ้างอิง 30 วัน

ใช้คำสั่ง DELETE ร่วมกับเงื่อนไข WHERE date_col < (ref_date - INTERVAL 30 DAY) เพื่อลบข้อมูลที่เก่ากว่าช่วงเวลาที่กำหนด

สร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable (DueDate DATE);
Query OK, 0 rows affected (0.68 sec)

mysql> INSERT INTO DemoTable VALUES('2019-08-25');
mysql> INSERT INTO DemoTable VALUES('2019-07-01');
mysql> INSERT INTO DemoTable VALUES('2019-06-20');
mysql> INSERT INTO DemoTable VALUES('2019-09-02');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+------------+
| DueDate    |
+------------+
| 2019-08-25 |
| 2019-07-01 |
| 2019-06-20 |
| 2019-09-02 |
+------------+
4 rows in set (0.00 sec)

คำสั่งลบวันที่เก่ากว่า 30 วันจาก 2019-08-31

mysql> DELETE FROM DemoTable WHERE DueDate < ('2019-08-31' - INTERVAL 30 DAY);
Query OK, 2 rows affected (0.22 sec)

ตรวจสอบข้อมูลที่เหลือ

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+------------+
| DueDate    |
+------------+
| 2019-08-25 |
| 2019-09-02 |
+------------+
2 rows in set (0.00 sec)

คำอธิบาย

  • '2019-08-31' - INTERVAL 30 DAY : คำนวณวันที่ 30 วันก่อน 31 สิงหาคม → 1 สิงหาคม
  • DueDate < '2019-08-01' : ลบวันที่เก่ากว่า 1 สิงหาคม (คือ 2019-07-01 และ 2019-06-20)
  • เหลือ 2019-08-25 และ 2019-09-02
  • ใช้ได้กับ DATE, DATETIME, TIMESTAMP
  • ระวัง: DELETE ไม่สามารถ Undo ได้ ควร Backup หรือใช้ Transaction