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

ดึงข้อมูลตามเดือนและปีเฉพาะใน MySQL ด้วย MONTH() และ YEAR()

การเตรียมข้อมูล

mysql> CREATE TABLE DemoTable1846 (
    PurchaseDate DATE
);

mysql> INSERT INTO DemoTable1846 VALUES('2019-01-10');
mysql> INSERT INTO DemoTable1846 VALUES('2019-12-24');
mysql> INSERT INTO DemoTable1846 VALUES('2018-09-21');
mysql> INSERT INTO DemoTable1846 VALUES('2017-10-26');

Query ตามเดือนและปี

mysql> SELECT * FROM DemoTable1846
    WHERE MONTH(PurchaseDate) = 12
    AND YEAR(PurchaseDate) = 2019;

ผลลัพธ์:

+--------------+
| PurchaseDate |
+--------------+
| 2019-12-24   |
+--------------+

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

ใช้การเปรียบเทียบช่วงวันที่ (Range Query) เพื่อใช้ดัชนีได้:

-- แนะนำ: ใช้ช่วงวันที่
SELECT * FROM DemoTable1846
WHERE PurchaseDate >= '2019-12-01'
AND PurchaseDate < '2020-01-01';

-- หรือใช้ LAST_DAY
SELECT * FROM DemoTable1846
WHERE PurchaseDate BETWEEN '2019-12-01' AND LAST_DAY('2019-12-01');

เหตุผลที่ควรหลีกเลี่ยง MONTH()/YEAR() บนคอลัมน์

  • ทำให้ไม่สามารถใช้ Index ได้ (Non-SARGable)
  • ต้อง Scan ทุกแถวในตาราง (Full Table Scan)
  • ช้าเมื่อข้อมูลเยอะ

ฟังก์ชันวันที่ที่น่าสนใจ

  • MONTH(date) - เดือน (1-12)
  • YEAR(date) - ปี (4 หลัก)
  • DAY(date) - วัน (1-31)
  • QUARTER(date) - ไตรมาส (1-4)
  • WEEK(date) - สัปดาห์ในปี