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

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

การกรองข้อมูลตามเดือนและปีด้วย 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()