การกรองข้อมูลตามวันที่ (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