กลับไปที่บล็อก
2 min read

วิธีการคำนวณอายุใน SQL (PostgreSQL, MySQL, SQL Server)

เรียนรู้รูปแบบ SQL ที่ใช้งานได้จริงเพื่อคำนวณอายุจากวันเกิด: ปีที่เสร็จสมบูรณ์ ปีและเดือนที่แน่นอน และอายุ ณ วันที่ระบุ รวมตัวอย่างสำหรับ PostgreSQL, MySQL และ SQL Server

วิธีการคำนวณอายุใน SQL (PostgreSQL, MySQL, SQL Server)

จำเป็นต้อง คำนวณอายุใน SQL จากวันเดือนปีเกิดหรือไม่ คู่มือนี้แสดงแบบสอบถามที่ใช้งานได้จริงและพร้อมคัดลอกสำหรับฐานข้อมูลทั่วไป คุณจะได้เรียนรู้วิธีการคำนวณ:

  • อายุเป็นปี (ปีที่ครบกำหนด)
  • อายุ ณ วันที่ระบุ (ไม่ใช่แค่วันนี้)
  • ผลลัพธ์สไตล์ที่แน่นอน (ปีและเดือน) เมื่อคุณต้องการรายละเอียดเพิ่มเติม

1) ตัดสินใจว่า "อายุ" หมายถึงอะไรสำหรับกรณีการใช้งานของคุณ

Most business logic uses years completed. นั่นหมายความว่าคนที่เกิดวันที่ 10-06-2543 มีอายุ 25 ปีในวันที่ 10-06-2569 ไม่ใช่เร็วกว่านั้น ระวังการลบปีแบบง่าย เช่น YEAR(today) - YEAR(dob) เพราะผิดก่อนวันเกิด

2) PostgreSQL: อายุเป็นปี (ปีที่เสร็จสมบูรณ์)

PostgreSQL มีฟังก์ชัน age() ในตัวที่ส่งคืนช่วงเวลา แยกปีเต็มดังนี้:

SELECT EXTRACT(YEAR FROM age(CURRENT_DATE, dob)) AS age_years
จากผู้คน;

PostgreSQL: อายุ ณ วันที่ระบุ

SELECT EXTRACT(YEAR FROM age(DATE '2026-02-23', dob)) AS age_years
จากผู้คน;

3) MySQL: อายุเป็นปี (ปีที่เสร็จสมบูรณ์)

ใน MySQL ให้ใช้ TIMESTAMPDIFF:

เลือก TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age_years
จากผู้คน;

MySQL: อายุ ณ วันที่ที่ระบุ

เลือก TIMESTAMPDIFF(YEAR, dob, DATE('2026-02-23')) AS age_years
จากผู้คน;

4) SQL Server: อายุเป็นปี (ปีที่เสร็จสมบูรณ์)

รูปแบบทั่วไปใน SQL Server คือ DATEDIFF ลบด้วยเช็ควันเกิด:

SELECT
  DATEDIFF(ปี, วันเกิด, นักแสดง(GETDATE() AS วันที่))
  - กรณี
      เมื่อ DATEADD(YEAR, DATEDIFF(YEAR, dob, CAST(GETDATE() AS date)), dob) > CAST(GETDATE() AS date)
      แล้ว 1 อื่น 0
    สิ้นสุดเมื่ออายุ_ปี
จากผู้คน;

SQL Server: อายุ ณ วันที่ระบุ

ประกาศ @as_of date = '2026-02-23';
เลือก
  DATEDIFF(ปี, วันเกิด, @as_of)
  - กรณี
      เมื่อ DATEADD(ปี, DATEDIFF(ปี, dob, @as_of), dob) > @as_of
      แล้ว 1 อื่น 0
    สิ้นสุดเมื่ออายุ_ปี
จากผู้คน;

5) ตัวอย่างอายุที่แน่นอน (ปีและเดือน)

หากคุณต้องการการนำเสนอที่ "แน่นอน" เช่น "31 ปี 4 เดือน" ให้คำนวณปีก่อน จากนั้นจึงนับเดือนหลังจากวันเกิดครั้งสุดท้าย นี่คือตัวอย่างหนึ่งของ PostgreSQL:

ด้วยฐาน AS (
  เลือกวันที่ CURRENT_DATE AS as_of
  จากผู้คน
)
เลือก
  EXTRACT(YEAR FROM age(as_of, dob)) AS ปี
  EXTRACT(MONTH FROM age(as_of, dob)) AS months
จากฐาน;

ข้อผิดพลาดที่พบบ่อย

  • เขตเวลา: เก็บ DOB เป็น วันที่ เมื่อเป็นไปได้ วันที่และเวลาสามารถเลื่อนข้ามโซนได้
  • วันเกิดวันอธิกสุรทิน: กำหนดสิ่งที่เกิดขึ้นในปีที่ไม่ใช่ปีอธิกสุรทิน ระบบส่วนใหญ่ถือว่าวันเกิดปี 2004-02-29 เป็น 02-28 หรือ 03-01 ขึ้นอยู่กับนโยบาย
  • DOB ที่เป็นโมฆะหรือในอนาคต: กรองหรือป้องกัน มิฉะนั้นข้อความค้นหาของคุณจะส่งกลับค่าว่างหรือค่าลบ

ตรวจสอบสุขภาพอย่างรวดเร็ว

หากคุณต้องการยืนยัน DOB เดียวอย่างรวดเร็ว คุณสามารถใช้เครื่องคิดเลขออนไลน์: คำนวณอายุออนไลน์.

คำแนะนำที่เกี่ยวข้อง

คำถามที่พบบ่อย

ทำไม YEAR(วันนี้) ลบ YEAR(dob) ผิด

ไม่สนใจว่าวันเกิดจะเกิดขึ้นในปีนี้หรือไม่ ดังนั้นจึงเกินอายุก่อนวันเกิด

ประเภท SQL ที่ปลอดภัยที่สุดสำหรับวันเกิดคืออะไร

ใช้คอลัมน์ วันที่ (ไม่ใช่วันที่เวลา) สำหรับ DOB หากคุณสนใจเฉพาะวันในปฏิทิน