การเตรียมข้อมูล
mysql> CREATE TABLE DemoTable1843 (
StartDate DATE,
EndDate DATE
);
mysql> INSERT INTO DemoTable1843 VALUES('2019-01-21', '2019-10-12');
mysql> INSERT INTO DemoTable1843 VALUES('2018-10-12', '2018-12-31');
mysql> INSERT INTO DemoTable1843 VALUES('2016-04-01', '2017-05-02');
Query ข้อมูลที่อยู่ในปี 2018
mysql> SELECT * FROM DemoTable1843
WHERE YEAR(StartDate) = '2018'
OR YEAR(EndDate) = '2018';
ผลลัพธ์:
+------------+------------+
| StartDate | EndDate |
+------------+------------+
| 2018-10-12 | 2018-12-31 |
+------------+------------+
การสร้างวันที่เริ่มต้นและสิ้นสุดของปี
ถ้าต้องการสร้างวันที่ 1 มกราคม และ 31 ธันวาคมของปีใดปีหนึ่ง:
-- วันที่ 1 มกราคม 2018
SELECT STR_TO_DATE('2018-01-01', '%Y-%m-%d');
-- หรือ
SELECT MAKEDATE(2018, 1);
-- วันที่ 31 ธันวาคม 2018
SELECT LAST_DAY('2018-12-01');
-- หรือ
SELECT DATE_SUB(MAKEDATE(2019, 1), INTERVAL 1 DAY);
การใช้งานใน WHERE Clause แบบมีประสิทธิภาพ
-- แบบใช้ Index ได้ (แนะนำ)
WHERE StartDate >= '2018-01-01' AND StartDate < '2019-01-01'
-- แบบใช้ Function (ไม่ใช้ Index)
WHERE YEAR(StartDate) = 2018
ฟังก์ชัน YEAR()
- ดึงปีจาก DATE/DATETIME/TIMESTAMP
- คืนค่าเป็นตัวเลข 4 หลัก
- ใช้ได้ใน SELECT, WHERE, GROUP BY, ORDER BY