Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

คำนวณอายุจาก DateOfBirth ใน MySQL ด้วย DATEDIFF

สามารถคำนวณอายุจากคอลัมน์ 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;