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

วิธีดึงข้อมูลตามปีและเดือนเฉพาะใน MySQL

กรองวันที่ด้วย YEAR() และ MONTH() หรือ Range Query

ใช้ฟังก์ชัน YEAR() และ MONTH() ดึงส่วนปี/เดือนจากคอลัมน์ DATETIME/DATE มาเปรียบเทียบ

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

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ShippingDate DATETIME
);

INSERT INTO DemoTable (ShippingDate) VALUES
('2019-01-31'), ('2018-12-01'), ('2019-06-02'), ('2019-11-18');

ข้อมูลในตาราง

+----+-----------------------+
| Id | ShippingDate          |
+----+-----------------------+
| 1  | 2019-01-31 00:00:00   |
| 2  | 2018-12-01 00:00:00   |
| 3  | 2019-06-02 00:00:00   |
| 4  | 2019-11-18 00:00:00   |
+----+-----------------------+

คำสั่งดึงข้อมูลเดือนมิถุนายน ปี 2019

SELECT * FROM DemoTable 
WHERE YEAR(ShippingDate) = 2019 
  AND MONTH(ShippingDate) = 6;

ผลลัพธ์

+----+-----------------------+
| Id | ShippingDate          |
+----+-----------------------+
| 3  | 2019-06-02 00:00:00   |
+----+-----------------------+

คำอธิบาย: YEAR() คืนปี (2019), MONTH() คืนเดือน (6) เปรียบเทียบกับตัวเลข

⚡ วิธีที่มีประสิทธิภาพมากกว่า (ใช้ Index ได้):

SELECT * FROM DemoTable 
WHERE ShippingDate >= '2019-06-01' 
  AND ShippingDate < '2019-07-01';

วิธีนี้ไม่ใช้ Function บนคอลัมน์ → MySQL ใช้ Index Range Scan ได้ → เร็วมากบนตารางใหญ่

ฟังก์ชันวันที่เกี่ยวข้อง: DAY(), HOUR(), MINUTE(), SECOND(), QUARTER(), WEEK(), DATE_FORMAT(date, '%Y-%m') (Format เป็นสตริง)