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

ค้นหาข้อมูลตามวันที่ใน MySQL ใช้ DATE() แยกวันที่จาก DATETIME

การกรองข้อมูลตามวันที่ (Date Part) จากคอลัมน์ DATETIME

ใช้ฟังก์ชัน DATE(datetime_column) เพื่อดึงเฉพาะส่วนวันที่ (ตัดเวลาออก) แล้วเปรียบเทียบกับวันที่ที่ต้องการ

Syntax

SELECT * FROM table_name 
WHERE DATE(datetime_column) = 'YYYY-MM-DD';

ตัวอย่างการใช้งาน

สร้างตารางบันทึกการเดินทาง:

mysql> CREATE TABLE DemoTable732 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    PassengerId INT,
    PassengerName VARCHAR(100),
    PassengerAge INT,
    PassengerTravelDatetime DATETIME
);
Query OK, 0 rows affected (0.67 sec)

mysql> INSERT INTO DemoTable732 (PassengerId, PassengerName, PassengerAge, PassengerTravelDatetime) VALUES 
    (110, 'Chris', 25, '2019-07-23 12:45:56'),
    (120, 'Robert', 24, '2019-07-21 11:05:00'),
    (120, 'Sam', 26, '2019-07-21 11:05:00');
Query OK, 3 rows affected

ข้อมูลทั้งหมด:

mysql> SELECT * FROM DemoTable732;
+----+-------------+---------------+--------------+-------------------------+
| Id | PassengerId | PassengerName | PassengerAge | PassengerTravelDatetime |
+----+-------------+---------------+--------------+-------------------------+
| 1  | 110         | Chris         | 25           | 2019-07-23 12:45:56     |
| 2  | 120         | Robert        | 24           | 2019-07-21 11:05:00     |
| 3  | 120         | Sam           | 26           | 2019-07-21 11:05:00     |
+----+-------------+---------------+--------------+-------------------------+
3 rows in set (0.00 sec)

นับจำนวนแถวที่ PassengerId=120 **และ** วันที่เดินทาง = '2019-07-21':

mysql> SELECT COUNT(Id) FROM DemoTable732 
WHERE PassengerId = 120 
  AND DATE(PassengerTravelDatetime) = '2019-07-21';
+-----------+
| count(Id) |
+-----------+
| 2         |
+-----------+
1 row in set (0.00 sec)

วิธีอื่นที่มีประสิทธิภาพมากกว่า (SARGable)

การใช้ Function บน Column (DATE(col)) ทำให้ **ไม่ใช้ Index ได้** วิธีที่ดีกว่า:

-- ใช้ Range แทน (ใช้ Index ได้)
WHERE PassengerTravelDatetime >= '2019-07-21 00:00:00'
  AND PassengerTravelDatetime <  '2019-07-22 00:00:00'

-- หรือ MySQL 8.0+ Functional Index
ALTER TABLE DemoTable732 ADD INDEX idx_travel_date ((DATE(PassengerTravelDatetime)));

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

  • DATE() - ดึงส่วนวันที่
  • TIME() - ดึงส่วนเวลา
  • YEAR(), MONTH(), DAY() - ดึงส่วนประกอบ
  • DATE_FORMAT() - จัดรูปแบบ custom