ใน MySQL สามารถดึงเฉพาะส่วน ปี (Year) จากคอลัมน์ TIMESTAMP, DATETIME, หรือ DATE ได้ง่ายด้วยฟังก์ชัน YEAR()
รูปแบบคำสั่ง
SELECT column_name
FROM table_name
WHERE YEAR(timestamp_column) = 'target_year';
ตัวอย่างการใช้งาน
1. สร้างตารางพร้อมคอลัมน์ TIMESTAMP
CREATE TABLE getYearOut (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(10),
yourTimestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (Id)
);
2. เพิ่มข้อมูลหลายปี
INSERT INTO getYearOut (Name, yourTimestamp) VALUES
('John', NOW()), -- ปีปัจจุบัน
('Carol', '2018-09-23 17:34:44'), -- ปี 2018
('Bob', '2016-05-12 16:12:34'); -- ปี 2016
ข้อมูลในตาราง:
+----+-------+---------------------+
| Id | Name | yourTimestamp |
+----+-------+---------------------+
| 1 | John | 2019-02-05 11:46:11 |
| 2 | Carol | 2018-09-23 17:34:44 |
| 3 | Bob | 2016-05-12 16:12:34 |
+----+-------+---------------------+
3. ดึงข้อมูลปี 2019
SELECT Id, Name
FROM getYearOut
WHERE YEAR(yourTimestamp) = '2019';
ผลลัพธ์:
+----+-------+
| Id | Name |
+----+-------+
| 1 | John |
+----+-------+
ฟังก์ชันแยกส่วนวันที่/เวลาอื่นๆ
| ฟังก์ชัน | คืนค่า | ตัวอย่าง |
|---|---|---|
YEAR(date) | ปี (4 หลัก) | 2019 |
MONTH(date) | เดือน (1-12) | 2 |
DAY(date) | วัน (1-31) | 4 |
HOUR(time) | ชั่วโมง (0-23) | 12 |
MINUTE(time) | นาที (0-59) | 56 |
SECOND(time) | วินาที (0-59) | 50 |
DATE(date) | ส่วนวันที่อย่างเดียว | 2019-02-04 |
TIME(date) | ส่วนเวลาอย่างเดียว | 12:56:50 |
QUARTER(date) | ไตรมาส (1-4) | 1 |
WEEK(date) | สัปดาห์ในปี (0-53) | 5 |
ตัวอย่าง: แยกหลายส่วนพร้อมกัน
SELECT
Name,
YEAR(yourTimestamp) AS yr,
MONTH(yourTimestamp) AS mo,
DAY(yourTimestamp) AS dy,
HOUR(yourTimestamp) AS hr
FROM getYearOut;
ประสิทธิภาพและ Index
คำเตือน: การใช้ฟังก์ชันบนคอลัมน์ใน WHERE (WHERE YEAR(col) = 2019) จะทำให้ ไม่สามารถใช้ Index ได้ (Non-SARGable)
วิธีแก้: ใช้ Range Query แทน
-- แทน WHERE YEAR(ts) = 2019
WHERE ts >= '2019-01-01 00:00:00'
AND ts < '2020-01-01 00:00:00';
วิธีนี้ใช้ Index บนคอลัมน์ timestamp ได้เต็มที่