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

ค้นหาแถวที่มีวันที่เท่าวันปัจจุบันใน MySQL ด้วย CURDATE()

บทนำ

การกรองข้อมูลที่มีวันที่ตรงกับวันปัจจุบัน (Date portion only, ไม่สนใจเวลา) ใช้ฟังก์ชัน CURDATE() ร่วมกับ DATE() เพื่อแปลง DATETIME เป็น DATE

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

mysql> CREATE TABLE DemoTable (
    -> DueDate DATE
    -> );
Query OK, 0 rows affected (1.35 sec)
mysql> INSERT INTO DemoTable VALUES('2019-06-14');
mysql> INSERT INTO DemoTable VALUES('2019-06-15');
mysql> INSERT INTO DemoTable VALUES('2019-06-16');
mysql> INSERT INTO DemoTable VALUES('2018-01-16');
mysql> INSERT INTO DemoTable VALUES('2018-07-16');

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

mysql> SELECT * FROM DemoTable;

ผลลัพธ์ (สมมติวันนี้ 2019-06-16)

+------------+
| DueDate    |
+------------+
| 2019-06-14 |
| 2019-06-15 |
| 2019-06-16 |
| 2018-01-16 |
| 2018-07-16 |
+------------+
5 rows in set (0.00 sec)

คำสั่งค้นหาแถวที่ DueDate = วันนี้

mysql> SELECT * FROM DemoTable WHERE DATE(DueDate) = CURDATE();

ผลลัพธ์

+------------+
| DueDate    |
+------------+
| 2019-06-16 |
+------------+
1 row in set (0.03 sec)

คำอธิบาย

  • CURDATE() คืนค่าวันปัจจุบันในรูปแบบ DATE (YYYY-MM-DD)
  • DATE(DueDate) แปลง DATETIME/TIMESTAMP เป็น DATE (ตัดเวลาออก) - สำคัญหากคอลัมน์เป็น DATETIME
  • หากคอลัมน์เป็น DATE แล้ว ใช้ DueDate = CURDATE() โดยตรงได้

ฟังก์ชันวันที่ที่เกี่ยวข้อง

ฟังก์ชันคืนค่าตัวอย่าง
CURDATE()วันปัจจุบัน (DATE)2024-01-15
CURRENT_DATEเท่ากับ CURDATE()2024-01-15
NOW()วันที่และเวลาปัจจุบัน (DATETIME)2024-01-15 10:30:45
CURRENT_TIMESTAMPเท่ากับ NOW()2024-01-15 10:30:45
CURTIME()เวลาปัจจุบัน (TIME)10:30:45

การประยุกต์: ช่วงวันที่

-- วันนี้ถึง 7 วันข้างหน้า
WHERE DueDate BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)

-- 7 วันที่ผ่านมา จนถึงวันนี้
WHERE DueDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE()