สามารถคำนวณอายุจากคอลัมน์ DateOfBirth (DATE) ได้โดยใช้ DATEDIFF() หาจำนวนวัน แล้วหาร 365.25 (คำนวณ Leap Year) และ CAST เป็น UNSIGNED
สร้างตารางและข้อมูล
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
DateOfBirth date
);
mysql> insert into DemoTable(DateOfBirth) values
('2010-01-21'),('1993-04-02'),('1999-12-01'),('1998-11-16'),('2004-03-19');
ข้อมูลในตาราง
+----+-------------+ | Id | DateOfBirth | +----+-------------+ | 1 | 2010-01-21 | | 2 | 1993-04-02 | | 3 | 1999-12-01 | | 4 | 1998-11-16 | | 5 | 2004-03-19 | +----+-------------+
คำสั่งคำนวณอายุ (ปี)
mysql> select cast(DATEDIFF(curdate(), DateOfBirth) / 365.25 AS UNSIGNED) AS AGE from DemoTable;
ผลลัพธ์ (สมมติวันนี้ 2019-04-09)
+------+ | AGE | +------+ | 9 | | 26 | | 19 | | 20 | | 15 | +------+
คำอธิบาย
DATEDIFF(curdate(), DateOfBirth)- จำนวนวันระหว่างวันนี้และวันเกิด/ 365.25- หารด้วย 365.25 วัน/ปี (คำนวณ Leap Year ประมาณ)CAST(... AS UNSIGNED)- ปัดทิ้งทศนิยม (Floor)
วิธีอื่น: TIMESTAMPDIFF (แนะนำ - แม่นยำกว่า)
SELECT TIMESTAMPDIFF(YEAR, DateOfBirth, CURDATE()) AS AGE FROM DemoTable;
- คำนวณปีครบรอบจริง (Birthday Logic)
- ไม่ต้องหาร 365.25
- Standard SQL Function
ตัวอย่าง: หา DOB ที่อายุ 20-26 ปี
mysql> SELECT * FROM DemoTable WHERE YEAR(CURDATE()) - YEAR(DateOfBirth) BETWEEN 20 AND 26;
+----+-------------+ | Id | DateOfBirth | +----+-------------+ | 2 | 1993-04-02 | | 3 | 1999-12-01 | | 4 | 1998-11-16 | +----+-------------+
คำเตือน: YEAR() Diff ไม่แม่นยำ
YEAR(CURDATE()) - YEAR(DOB)คำนวณแค่ความต่างปี ไม่เช็คเดือน/วัน- คนเกิด 31 ธ.ค. ปี 2000 → วันที่ 1 ม.ค. 2021 YEAR Diff = 21 แต่อายุจริง 20
- ใช้ TIMESTAMPDIFF(YEAR, ...) แทน
Query แบบแม่นยำที่สุด
SELECT Id, DateOfBirth,
TIMESTAMPDIFF(YEAR, DateOfBirth, CURDATE()) AS exact_age
FROM DemoTable
WHERE TIMESTAMPDIFF(YEAR, DateOfBirth, CURDATE()) BETWEEN 20 AND 26;