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

MySQL: ดึงข้อมูลวันที่เท่ากับวันนี้ (Today) ด้วย CURDATE()


คำอธิบาย

ใช้ CURDATE() เพื่อดึงวันที่ปัจจุบัน (ไม่รวมเวลา) และเปรียบเทียบกับคอลัมน์ DATE/DATETIME โดยใช้ DATE() แปลง DATETIME ให้เหลือแค่ส่วนวันที่

ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง

mysql> create table DemoTable ( 
    RegistrationLastDate datetime ); 
Query OK, 0 rows affected (0.61 sec)

สมมติวันนี้คือ 2019-09-03

การเพิ่มข้อมูล

mysql> insert into DemoTable values('2019-08-01'); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-09-03 9:50:56'); 
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2019-09-03'); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-09-02'); 
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2019-09-02 9:50:00'); 
Query OK, 1 row affected (0.10 sec)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;

ผลลัพธ์:

+----------------------+
| RegistrationLastDate |
+----------------------+
| 2019-08-01 00:00:00  |
| 2019-09-03 09:50:56  |
| 2019-09-03 00:00:00  |
| 2019-09-02 00:00:00  |
| 2019-09-02 09:50:00  |
+----------------------+
5 rows in set (0.00 sec)

คิวรี่ดึงข้อมูลวันที่ = วันนี้

mysql> select * from DemoTable 
where DATE(RegistrationLastDate) = CURDATE();

ผลลัพธ์

+----------------------+
| RegistrationLastDate |
+----------------------+
| 2019-09-03 09:50:56  |
| 2019-09-03 00:00:00  |
+----------------------+
2 rows in set (0.01 sec)

คำอธิบาย

  • DATE(RegistrationLastDate): แปลง DATETIME ให้เหลือ DATE (ตัดเวลาออก)
  • CURDATE(): คืนค่าวันที่ปัจจุบันของ Server (Format: YYYY-MM-DD)
  • เปรียบเทียบได้แม้คอลัมน์จะเป็น DATETIME ก็ตาม

เคล็ดลับประสิทธิภาพ (Performance)

หากตารางใหญ่ ควรสร้าง Index บนคอลัมน์วันที่ และใช้ Range Query แทน:

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

วิธีนี้ใช้ Index ได้ ในขณะที่ DATE() ทำให้ Index ไม่ทำงาน