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

ดึงข้อมูล 2 วัน (วันนี้และวานนี้) จากตาราง MySQL ที่เก็บ Timestamp เป็น BIGINT

กรองข้อมูล Timestamp (Unix Time) 2 วันล่าสุด

เมื่อคอลัมน์เก็บเวลาเป็น BIGINT (Unix Timestamp) ให้ใช้ UNIX_TIMESTAMP() ร่วมกับ CURDATE() และ INTERVAL เพื่อคำนวณช่วงเวลา

สร้างตารางและข้อมูล

mysql> CREATE TABLE DemoTable1495 (ShippingDate BIGINT);
Query OK, 0 rows affected (0.63 sec)

mysql> INSERT INTO DemoTable1495 VALUES
    -> (1570127400), (1570213800), (1570645800), (1570300200);
Query OK, 4 rows affected

วันที่ปัจจุบัน (สมมติ)

mysql> SELECT CURDATE();
+------------+
| curdate()  |
+------------+
| 2019-10-06 |
+------------+

คำสั่ง: ดึงข้อมูล ShippingDate ของวันนี้และวานนี้

mysql> SELECT * FROM DemoTable1495
    -> WHERE ShippingDate >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 1 DAY)
    ->   AND ShippingDate < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY);

ผลลัพธ์

+--------------+
| ShippingDate |
+--------------+
|  1570213800  |
|  1570300200  |
+--------------+
2 rows in set (0.00 sec)

คำอธิบายตรรกะ

  • CURDATE() - INTERVAL 1 DAY = 2019-10-05 (วานนี้ 00:00:00)
  • UNIX_TIMESTAMP(...) แปลงเป็น Unix Timestamp
  • ShippingDate >= ... มากกว่าหรือเท่ากับต้นวันวานนี้
  • ShippingDate < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY) น้อยกว่าต้นวันพรุ่งนี้ (คือจนสิ้นวันนี้)
  • ครอบคลุม 2 วันเต็ม: วานนี้ 00:00:00 - วันนี้ 23:59:59

แปลง Timestamp กลับเป็นวันที่อ่านได้ (เพื่อตรวจสอบ)

mysql> SELECT FROM_UNIXTIME(1570213800), FROM_UNIXTIME(1570300200);
+---------------------------+---------------------------+
| FROM_UNIXTIME(1570213800) | FROM_UNIXTIME(1570300200) |
+---------------------------+---------------------------+
| 2019-10-05 10:30:00       | 2019-10-06 10:30:00       |
+---------------------------+---------------------------+

เคล็ดลับ: ถ้าคอลัมน์เป็น DATETIME แล้ว

WHERE datetime_col >= CURDATE() - INTERVAL 1 DAY
  AND datetime_col < CURDATE() + INTERVAL 1 DAY