MySQL มีฟังก์ชัน YEAR() สำหรับดึงส่วนของปีออกมาจากค่าวันที่หรือเวลา ใช้งานได้ทั้งกับคอลัมน์ชนิด DATE, DATETIME, TIMESTAMP และแม้แต่สตริงที่แปลงเป็นวันที่ได้
ใช้กับวันที่ปัจจุบัน
mysql> SELECT YEAR(CURDATE()) AS OnlyYearFromCurrentDate;
+-------------------------+
| OnlyYearFromCurrentDate |
+-------------------------+
| 2018 |
+-------------------------+
1 row in set (0.00 sec)
หรือใช้กับ NOW() ก็ได้:
mysql> SELECT YEAR(DATE(NOW())) AS OnlyYearFromCurrentDate;
ใช้กับคอลัมน์ชนิด VARCHAR (ข้อความ)
หากคอลัมน์เก็บวันที่เป็นข้อความ ต้องแปลงด้วย STR_TO_DATE() ก่อน:
mysql> CREATE TABLE ExtractYearDemo (
-> YourDueTime VARCHAR(200)
-> );
Query OK, 0 rows affected (1.15 sec)
mysql> INSERT INTO ExtractYearDemo VALUES ('27-10-2011');
mysql> INSERT INTO ExtractYearDemo VALUES ('28-11-2012');
mysql> INSERT INTO ExtractYearDemo VALUES ('29-12-2018');
mysql> INSERT INTO ExtractYearDemo VALUES ('01-01-2019');
mysql> SELECT YEAR(STR_TO_DATE(YourDueTime, '%d-%m-%Y')) AS OnlyYearFromDate
-> FROM ExtractYearDemo;
+------------------+
| OnlyYearFromDate |
+------------------+
| 2011 |
| 2012 |
| 2018 |
| 2019 |
+------------------+
4 rows in set (0.00 sec)
ฟังก์ชันเกี่ยวข้อง
| ฟังก์ชัน | คืนค่า |
|---|---|
YEAR(date) | ปี (1000-9999) |
MONTH(date) | เดือน (1-12) |
DAY(date) | วันที่ (1-31) |
QUARTER(date) | ไตรมาส (1-4) |
WEEK(date) | สัปดาห์ในปี (0-53) |
แนวทางปฏิบัติที่ดี: ควรเก็บวันที่ในชนิด DATE หรือ DATETIME ตรงๆ เพื่อประสิทธิภาพและความถูกต้อง แทนที่จะเก็บเป็น VARCHAR