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

เปรียบเทียบ DATE String กับ DATETIME Field ใน MySQL ด้วย DATE()

กรองข้อมูล DATETIME เฉพาะวันที่ ต้องใช้ฟังก์ชัน DATE()

คอลัมน์ DATETIME เก็บทั้งวันที่และเวลา ต้องใช้ DATE() ดึงเฉพาะส่วนวันที่มาเปรียบเทียบกับ String

รูปแบบคำสั่ง (Syntax)

SELECT * FROM yourTableName 
WHERE DATE(yourDateTimeColumn) = 'date_string';

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

สร้างตาราง DateTimeDemo:

CREATE TABLE DateTimeDemo (
    ArrivalTime DATETIME
);

เพิ่มข้อมูล:

INSERT INTO DateTimeDemo VALUES 
(NOW()),
(DATE_ADD(NOW(), INTERVAL 2 YEAR)),
(DATE_ADD(NOW(), INTERVAL 1 YEAR)),
(DATE_ADD(NOW(), INTERVAL 4 YEAR)),
(DATE_ADD(NOW(), INTERVAL -2 YEAR)),
(DATE_ADD(NOW(), INTERVAL -1 YEAR));

ข้อมูล (สมมติ NOW = 2018-12-06 10:12:45):

ArrivalTime
2018-12-06 10:12:45
2020-12-06 10:13:10
2019-12-06 10:13:21
2022-12-06 10:13:27
2016-12-06 10:13:42
2017-12-06 10:13:50

ค้นหาวันที่ 2022-12-06:

SELECT * FROM DateTimeDemo 
WHERE DATE(ArrivalTime) = '2022-12-06';

ผลลัพธ์:

ArrivalTime
2022-12-06 10:13:27

ข้อควรระวังด้านประสิทธิภาพ

DATE(column) = 'value' จะทำให้ Index ไม่ถูกใช้งาน (Non-SARGable)

วิธีแก้ (Best Practice): ใช้ Range Query แทน

-- ดีกว่า: ใช้ Index ได้
SELECT * FROM DateTimeDemo 
WHERE ArrivalTime >= '2022-12-06 00:00:00' 
  AND ArrivalTime < '2022-12-07 00:00:00';

หรือ MySQL 8.0+ ใช้ Functional Index:

ALTER TABLE DateTimeDemo 
ADD INDEX idx_arrival_date ((DATE(ArrivalTime)));