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

ลบแถวที่เก่ากว่า 5 วันใน MySQL ใช้ DATEDIFF

ใช้ 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_DateDATEDIFF(NOW, Post_Date)> 5?ผลลัพธ์
2019-03-11-1 (อนาคต)Noคงอยู่
2019-03-100 (วันนี้)Noคงอยู่
2019-03-019Yesลบ
2019-02-1226Yesลบ
2019-02-1919Yesลบ
2019-01-3138Yesลบ
2019-01-2643Yesลบ

วิธีที่แนะนำมากกว่า (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) ลำดับคนละด้าน