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

การ SELECT วันที่จาก 00:00 ถึงเวลาปัจจุบันใน MySQL

เพื่อดึงข้อมูลจากต้นวัน (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:00
  • NOW() คืนค่าวันที่และเวลาปัจจุบัน
  • เงื่อนไข > และ < ไม่รวมขอบเขต (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)