วิธีการคำนวณอายุใน 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 หากคุณสนใจเฉพาะวันในปฏิทิน