การกรองข้อมูลตามเดือนและปีด้วย YEAR() และ MONTH()
ใช้ฟังก์ชัน YEAR() และ MONTH() เพื่อดึงส่วนปีและเดือนจากคอลัมน์วันที่/เวลา แล้วเปรียบเทียบกับค่าที่ต้องการ
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (
CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
CustomerName VARCHAR(20),
CustomerTotalBill INT,
PurchasingDate DATE
);
เพิ่มข้อมูล:
INSERT INTO DemoTable (CustomerName, CustomerTotalBill, PurchasingDate) VALUES
('John', 2000, '2019-01-21'),
('Chris', 1000, '2019-01-31'),
('Robert', 4500, '2018-01-01'),
('Sam', 5500, '2017-02-12'),
('Carol', 500, '2016-01-12');
ข้อมูลในตาราง
+------------+--------------+-------------------+----------------+ | CustomerId | CustomerName | CustomerTotalBill | PurchasingDate | +------------+--------------+-------------------+----------------+ | 1 | John | 2000 | 2019-01-21 | | 2 | Chris | 1000 | 2019-01-31 | | 3 | Robert | 4500 | 2018-01-01 | | 4 | Sam | 5500 | 2017-02-12 | | 5 | Carol | 500 | 2016-01-12 | +------------+--------------+-------------------+----------------+
คำสั่งดึงข้อมูลเดือนมกราคม ปี 2019
SELECT * FROM DemoTable WHERE YEAR(PurchasingDate) = 2019 AND MONTH(PurchasingDate) = 1;
ผลลัพธ์
+------------+--------------+-------------------+----------------+ | CustomerId | CustomerName | CustomerTotalBill | PurchasingDate | +------------+--------------+-------------------+----------------+ | 1 | John | 2000 | 2019-01-21 | | 2 | Chris | 1000 | 2019-01-31 | +------------+--------------+-------------------+----------------+
คำอธิบาย: YEAR() และ MONTH() รับคอลัมน์ DATE/DATETIME/TIMESTAMP คืนค่าตัวเลขปี/เดือน ตามลำดับ
วิธีอื่นที่มีประสิทธิภาพมากกว่า (Sargable - ใช้ Index ได้):
SELECT * FROM DemoTable WHERE PurchasingDate >= '2019-01-01' AND PurchasingDate < '2019-02-01';
วิธีนี้ช่วยให้ MySQL ใช้ Index บนคอลัมน์ PurchasingDate ได้ (Range Scan) เร็วกว่าการใช้ Function บนคอลัมน์อย่างมาก
ฟังก์ชันวันที่อื่นๆ ที่น่ารู้: DAY(), HOUR(), MINUTE(), SECOND(), QUARTER(), WEEK(), DAYOFWEEK(), DAYOFYEAR()