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

การเปรียบเทียบวันที่ใน MySQL เพื่อดึงข้อมูลในช่วงวันที่ที่กำหนด

การ Query ข้อมูลในช่วงวันที่ด้วยการเปรียบเทียบ Date

ใช้ตัวดำเนินการเปรียบเทียบ >= และ <= (หรือ BETWEEN) กับคอลัมน์ชนิด DATE หรือ DATETIME

รูปแบบคำสั่ง

SELECT * FROM table_name 
WHERE date_column >= 'start_date' AND date_column <= 'end_date';

ตัวอย่าง: ดึงวันที่ระหว่าง 2019-06-01 ถึง 2019-08-31

1. สร้างตารางและเพิ่มข้อมูล

CREATE TABLE DemoTable (AdmissionDate DATE);
INSERT INTO DemoTable VALUES ('2019-08-31'), ('2019-09-01'), ('2019-05-10'), ('2019-06-12');

2. ดูข้อมูลทั้งหมด

SELECT * FROM DemoTable;

ผลลัพธ์:

+---------------+
| AdmissionDate |
+---------------+
| 2019-08-31    |
| 2019-09-01    |
| 2019-05-10    |
| 2019-06-12    |
+---------------+

3. Query ช่วงวันที่

SELECT * FROM DemoTable 
WHERE AdmissionDate >= '2019-06-01' AND AdmissionDate <= '2019-08-31';

ผลลัพธ์:

+---------------+
| AdmissionDate |
+---------------+
| 2019-08-31    |
| 2019-06-12    |
+---------------+

ใช้ BETWEEN (เทียบเท่า)

SELECT * FROM DemoTable 
WHERE AdmissionDate BETWEEN '2019-06-01' AND '2019-08-31';

ข้อควรระวังกับ DATETIME/TIMESTAMP

หากคอลัมน์เป็น DATETIME หรือ TIMESTAMP:

-- BETWEEN อาจพลาดเวลา
WHERE CreatedAt BETWEEN '2024-01-01' AND '2024-01-31'  
-- จับได้แค่ 2024-01-31 00:00:00 (เวลา 00:00:00)

-- แก้ด้วย AND
WHERE CreatedAt >= '2024-01-01' AND CreatedAt < '2024-02-01'
-- จับได้ครบวัน 31 มกราคม จนถึง 23:59:59.999999

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

ฟังก์ชันคำอธิบาย
DATE(col)ดึงส่วนวันที่จาก DATETIME
YEAR(col), MONTH(col), DAY(col)ดึงปี/เดือน/วัน
DATE_ADD(date, INTERVAL n UNIT)บวกช่วงเวลา
DATE_SUB(date, INTERVAL n UNIT)ลบช่วงเวลา
DATEDIFF(date1, date2)หาความต่างวัน
NOW(), CURDATE(), CURTIME()วันที่/เวลาปัจจุบัน

ตัวอย่าง: 7 วันที่ผ่านมา

SELECT * FROM Orders 
WHERE OrderDate >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);

Index และประสิทธิภาพ

  • สร้าง Index บนคอลัมน์ Date: CREATE INDEX idx_date ON DemoTable(AdmissionDate)
  • Range Query (>=, <=, BETWEEN) ใช้ Index ได้ดี
  • หลีกเลี่ยง Function บนคอลัมน์: WHERE DATE(CreatedAt) = '2024-01-01' → ไม่ใช้ Index