เพื่อดึงข้อมูลจากต้นวัน (00:00:00) จนถึงเวลาปัจจุบัน ใช้ DATE(NOW()) และ NOW() ร่วมกับ BETWEEN หรือเปรียบเทียบโดยตรง
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
DueDate datetime );
Query OK, 0 rows affected (0.66 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values('2019-09-14'); Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2019-09-14 08:00:10'); Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-09-14 08:44:00'); Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2019-09-14 12:10:00'); Query OK, 1 row affected (0.12 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+---------------------+ | DueDate | +---------------------+ | 2019-09-14 00:00:00 | | 2019-09-14 08:00:10 | | 2019-09-14 08:44:00 | | 2019-09-14 12:10:00 | +---------------------+ 4 rows in set (0.00 sec)
คิวรี่ดึงข้อมูลจาก 00:00 ถึงตอนนี้
mysql> select *from DemoTable where DueDate > DATE(NOW()) and DueDate < NOW();
ผลลัพธ์ (สมมติ NOW() = 2019-09-14 08:50:10):
+---------------------+ | DueDate | +---------------------+ | 2019-09-14 08:00:10 | | 2019-09-14 08:44:00 | +---------------------+ 2 rows in set (0.00 sec)
คำอธิบาย
DATE(NOW())คืนค่าวันที่ปัจจุบันเวลา 00:00:00NOW()คืนค่าวันที่และเวลาปัจจุบัน- เงื่อนไข
>และ<ไม่รวมขอบเขต (exclusive) ใช้>=และ<=หากต้องการรวม
วิธีทางเลือกอื่น
-- ใช้ BETWEEN (รวมขอบเขต) WHERE DueDate BETWEEN DATE(NOW()) AND NOW() -- ใช้ DATE() ทั้งสองข้าง (เปรียบเทียบเฉพาะวันที่) WHERE DATE(DueDate) = DATE(NOW()) AND DueDate <= NOW() -- ใช้ TIME() สำหรับกรองเวลา WHERE DATE(DueDate) = CURDATE() AND TIME(DueDate) <= TIME(NOW())
ประสิทธิภาพ
การใช้ฟังก์ชันบนคอลัมน์ (DATE(DueDate)) จะทำให้ไม่ใช้ Index ได้ ควรใช้รูปแบบ DueDate >= '2019-09-14 00:00:00' AND DueDate <= '2019-09-14 08:50:10' แทน (คำนวณค่าใน Application layer)