บทนำ
วิธีที่แม่นยำที่สุดในการคำนวณอายุจากวันเกิด (Date of Birth) ใน MySQL คือใช้ฟังก์ชัน TIMESTAMPDIFF() ซึ่งคำนวณความต่างในหน่วยที่ระบุ (YEAR, MONTH, DAY)
รูปแบบการใช้งาน
SELECT TIMESTAMPDIFF(YEAR, yourColumnName, CURRENT_DATE) AS Age
FROM yourTableName;
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> DateOfBirth DATETIME
-> );
Query OK, 0 rows affected (0.73 sec)
mysql> INSERT INTO DemoTable(DateOfBirth) VALUES('1998-06-04 12:30:00');
mysql> INSERT INTO DemoTable(DateOfBirth) VALUES('2000-01-31 04:10:20');
mysql> INSERT INTO DemoTable(DateOfBirth) VALUES('2010-12-01 03:50:45');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+----+---------------------+
| Id | DateOfBirth |
+----+---------------------+
| 1 | 1998-06-04 12:30:00 |
| 2 | 2000-01-31 04:10:20 |
| 3 | 2010-12-01 03:50:45 |
+----+---------------------+
3 rows in set (0.00 sec)
คำสั่งคำนวณอายุ (สมมติวันนี้ 2019-06-09)
mysql> SELECT TIMESTAMPDIFF(YEAR, DateOfBirth, CURRENT_DATE) AS YourAge
-> FROM DemoTable;
ผลลัพธ์
+---------+
| YourAge |
+---------+
| 21 |
| 19 |
| 8 |
+---------+
3 rows in set (0.00 sec)
คำอธิบาย
TIMESTAMPDIFF(unit, datetime1, datetime2)คืนค่าdatetime2 - datetime1ในหน่วยunit- หน่วย
YEARจะคำนวณปีครบรอบ (Birthday ที่ผ่านมาแล้ว) ไม่ใช่แค่ลบปี - แม่นยำกว่า
DATEDIFF() / 365เพราะคำนวณวันเกิดจริง
ตัวอย่างเพิ่มเติม
-- อายุในหน่วยเดือน
SELECT TIMESTAMPDIFF(MONTH, DateOfBirth, CURRENT_DATE) AS AgeInMonths;
-- อายุในหน่วยวัน
SELECT TIMESTAMPDIFF(DAY, DateOfBirth, CURRENT_DATE) AS AgeInDays;
-- อายุครบรอบปี + เดือน + วัน
SELECT
TIMESTAMPDIFF(YEAR, DOB, CURDATE()) AS Years,
TIMESTAMPDIFF(MONTH, DOB, CURDATE()) % 12 AS Months,
DATEDIFF(CURDATE(), DATE_ADD(DOB, INTERVAL TIMESTAMPDIFF(MONTH, DOB, CURDATE()) MONTH)) AS Days
FROM DemoTable;