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

MySQL: SELECT เรคคอร์ดเฉพาะเดือนและปีที่กำหนดด้วย MONTH() และ YEAR()


คำอธิบาย

ใช้ MONTH() ดึงเดือน และ YEAR() ดึงปี จาก DATE/DATETIME แล้วกรองใน WHERE clause

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

mysql> create table DemoTable ( 
    StudentName varchar(40), 
    StudentAdmissionDate date ); 
Query OK, 0 rows affected (0.67 sec)

การเพิ่มข้อมูล

mysql> insert into DemoTable values('Chris', '2019-01-21'); 
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Robert', '2018-09-05'); 
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Mike', '2019-09-05'); 
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('David', '2019-10-04'); 
Query OK, 1 row affected (0.14 sec)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;

ผลลัพธ์:

+-------------+----------------------+
| StudentName | StudentAdmissionDate |
+-------------+----------------------+
| Chris       | 2019-01-21           |
| Robert      | 2018-09-05           |
| Mike        | 2019-09-05           |
| David       | 2019-10-04           |
+-------------+----------------------+
4 rows in set (0.00 sec)

คิวรี่กรองเดือน 09 (กันยายน) ปี 2019

mysql> select * from DemoTable 
where MONTH(StudentAdmissionDate) = 09 
and YEAR(StudentAdmissionDate) = 2019;

ผลลัพธ์

+-------------+----------------------+
| StudentName | StudentAdmissionDate |
+-------------+----------------------+
| Mike        | 2019-09-05           |
+-------------+----------------------+
1 row in set (0.00 sec)

คำอธิบาย

  • MONTH(date): คืนค่า 1-12
  • YEAR(date): คืนค่า 4 หลัก (2019)
  • 09 และ 9 ให้ผลลัพธ์เหมือนกัน (Leading zero ถูก Ignore)

ประสิทธิภาพ: ใช้ Range Query แทน

WHERE StudentAdmissionDate >= '2019-09-01' 
  AND StudentAdmissionDate < '2019-10-01'

วิธีนี้ใช้ Index บน StudentAdmissionDate ได้ ในขณะที่ MONTH()/YEAR() ทำให้ Index ไม่ทำงาน

ฟังก์ชันวันที่อื่นๆ

  • DAY() / DAYOFMONTH(): วันของเดือน
  • QUARTER(): ไตรมาส (1-4)
  • WEEK(): สัปดาห์ของปี
  • DAYOFWEEK(): วันของสัปดาห์ (1=อาทิตย์)