คำอธิบาย
ใช้ 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=อาทิตย์)