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

คำนวณอายุจากวันเกิดใน MySQL ด้วย TIMESTAMPDIFF()

บทนำ

วิธีที่แม่นยำที่สุดในการคำนวณอายุจากวันเกิด (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;