กรองข้อมูล 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 TimestampShippingDate >= ...มากกว่าหรือเท่ากับต้นวันวานนี้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