ใช้ DATEDIFF() คำนวณความต่างวัน ร่วมกับ NOW() เพื่อลบข้อมูลเก่ากว่า 5 วัน
ไวยากรณ์
DELETE FROM yourTableName WHERE DATEDIFF(NOW(), yourTableName.yourDateColumnName) > 5;
หมายเหตุ
สมมติวันนี้คือ 2019-03-10
สร้างตารางตัวอย่าง
mysql> CREATE TABLE deleteRowsOlderThan5Demo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(100),
-> Post_Date DATE
-> );
เพิ่มข้อมูลตัวอย่าง
mysql> INSERT INTO deleteRowsOlderThan5Demo(Name, Post_Date) VALUES
('Larry', '2019-03-11'), ('Mike', '2019-02-12'), ('Sam', '2019-03-10'),
('Carol', '2019-03-01'), ('David', '2019-01-31'), ('Maxwell', '2019-01-26'), ('John', '2019-02-19');
แสดงข้อมูลก่อน (7 แถว)
mysql> SELECT * FROM deleteRowsOlderThan5Demo;
ผลลัพธ์:
+----+---------+------------+ | Id | Name | Post_Date | +----+---------+------------+ | 1 | Larry | 2019-03-11 | | 2 | Mike | 2019-02-12 | | 3 | Sam | 2019-03-10 | | 4 | Carol | 2019-03-01 | | 5 | David | 2019-01-31 | | 6 | Maxwell | 2019-01-26 | | 7 | John | 2019-02-19 | +----+---------+------------+
ลบแถวที่เก่ากว่า 5 วัน (จาก 2019-03-10)
mysql> DELETE FROM deleteRowsOlderThan5Demo
-> WHERE DATEDIFF(NOW(), deleteRowsOlderThan5Demo.Post_Date) > 5;
Query OK, 5 rows affected (0.14 sec)
ตรวจสอบหลังลบ (เหลือ 2 แถว: 2019-03-11 และ 2019-03-10)
mysql> SELECT * FROM deleteRowsOlderThan5Demo;
ผลลัพธ์:
+----+-------+------------+ | Id | Name | Post_Date | +----+-------+------------+ | 1 | Larry | 2019-03-11 | | 3 | Sam | 2019-03-10 | +----+-------+------------+
การคำนวณ DATEDIFF (วันนี้ = 2019-03-10)
| Post_Date | DATEDIFF(NOW, Post_Date) | > 5? | ผลลัพธ์ |
|---|---|---|---|
| 2019-03-11 | -1 (อนาคต) | No | คงอยู่ |
| 2019-03-10 | 0 (วันนี้) | No | คงอยู่ |
| 2019-03-01 | 9 | Yes | ลบ |
| 2019-02-12 | 26 | Yes | ลบ |
| 2019-02-19 | 19 | Yes | ลบ |
| 2019-01-31 | 38 | Yes | ลบ |
| 2019-01-26 | 43 | Yes | ลบ |
วิธีที่แนะนำมากกว่า (SARGable - ใช้ Index ได้)
DELETE FROM yourTableName WHERE yourDateColumn < DATE_SUB(CURDATE(), INTERVAL 5 DAY);
ไม่ใช้ฟังก์ชันบนคอลัมน์ → ใช้ Index ได้ → เร็วกว่ามากในตารางใหญ่
DATEDIFF vs TIMESTAMPDIFF
DATEDIFF(date1, date2)= ความต่างวัน (date1 - date2)TIMESTAMPDIFF(DAY, date1, date2)= ความต่างวัน (date2 - date1) ลำดับคนละด้าน