สูตรคำนวณอายุ (ปีเต็ม)
ใช้ YEAR(CURRENT_TIMESTAMP) ลบ YEAR(dob) แล้วปรับตามว่าวันเกิดปีนี้ผ่านไปหรือยัง:
SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(dob_column)
- (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(dob_column, 5)) AS age
FROM your_table;
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มวันเกิดต่างๆ
CREATE TABLE AgeCalculatesDemo (YourDateOfBirth DATETIME);
INSERT INTO AgeCalculatesDemo VALUES
(DATE_ADD(NOW(), INTERVAL -22 YEAR)), -- 22 ปีก่อน
(DATE_ADD(NOW(), INTERVAL -12 YEAR)), -- 12 ปีก่อน
(DATE_ADD(NOW(), INTERVAL -19 YEAR)), -- 19 ปีก่อน
('2010-04-05'); -- วันที่คงที่
ข้อมูลวันเกิด (สมมติ NOW = 2018-12-06)
+---------------------+
| YourDateOfBirth |
+---------------------+
| 1996-12-06 23:35:26 |
| 2006-12-06 23:35:32 |
| 1999-12-06 23:35:42 |
| 2010-04-05 00:00:00 |
+---------------------+
คำสั่งคำนวณอายุ
SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(YourDateOfBirth)
- (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(YourDateOfBirth, 5)) AS YourAge
FROM AgeCalculatesDemo;
ผลลัพธ์
+---------+
| YourAge |
+---------+
| 22 |
| 12 |
| 19 |
| 8 |
+---------+
คำอธิบายตรรกะ
YEAR(CURRENT_TIMESTAMP) - YEAR(dob)= ความต่างปีโดยประมาณRIGHT(date, 5)= ดึง "MM-DD" (เดือน-วัน)RIGHT(NOW,5) < RIGHT(dob,5)= วันนี้ยังไม่ถึงวันเกิดปีนี้ = 1 (True) → ลบอีก 1- รวม = อายุปีเต็มที่ถูกต้อง
วิธีอื่นที่เข้าใจง่ายกว่า (MySQL 8.0+)
-- ใช้ TIMESTAMPDIFF
SELECT TIMESTAMPDIFF(YEAR, YourDateOfBirth, CURDATE()) AS Age
FROM AgeCalculatesDemo;
TIMESTAMPDIFF จัดการวันเกิด 29 กุมภาพันธ์ และ Edge Cases ได้ถูกต้องกว่า
คำนวณอายุละเอียด (ปี เดือน วัน)
SELECT
TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS years,
TIMESTAMPDIFF(MONTH, dob, CURDATE()) % 12 AS months,
FLOOR(DATEDIFF(CURDATE(), DATE_ADD(dob, INTERVAL TIMESTAMPDIFF(MONTH, dob, CURDATE()) MONTH))) AS days
FROM your_table;