كيفية حساب العمر في SQL (PostgreSQL، MySQL، SQL Server)
تعلم أنماط SQL العملية لحساب العمر من تاريخ الميلاد: السنوات المكتملة، والسنوات والأشهر بالضبط، والعمر اعتبارًا من تاريخ محدد. يتضمن أمثلة لـ PostgreSQL وMySQL وSQL Server.
هل تحتاج إلى حساب العمر في SQL من تاريخ الميلاد؟ يعرض هذا الدليل استعلامات عملية وجاهزة للنسخ لقواعد البيانات المشتركة. سوف تتعلم كيفية حساب:
- العمر بالسنوات (السنوات المكتملة)
- العمر اعتبارًا من تاريخ محدد (ليس اليوم فقط)
- إخراج النمط الدقيق (السنوات والأشهر) عندما تحتاج إلى مزيد من التفاصيل
1) تحديد معنى "العمر" بالنسبة لحالة الاستخدام الخاصة بك
تستخدم معظم منطق الأعمال السنوات المكتملة. وهذا يعني أن الشخص المولود في 10-06-2000 سيبلغ 25 عامًا في 10-06-2026، وليس قبل ذلك. كن حذرًا عند عملية طرح السنة البسيطة مثل YEAR(today) - YEAR(dob)، لأنه خطأ قبل عيد الميلاد.
2) PostgreSQL: العمر بالسنوات (السنوات المكتملة)
يحتوي PostgreSQL على وظيفة age() التي تُرجع الفاصل الزمني. استخرج السنوات الكاملة هكذا:
اختر مقتطف(سنة من العمر (CURRENT_DATE، تاريخ الميلاد)) AS age_years
من الأشخاص؛
PostgreSQL: العمر اعتبارًا من تاريخ محدد
اختر مقتطف(سنة من العمر(DATE '2026-02-23', dob)) AS age_years
من الأشخاص؛
3) MySQL: العمر بالسنوات (السنوات المكتملة)
في MySQL، استخدم TIMESTAMPDIFF:
SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age_years
من الأشخاص؛
MySQL: العمر اعتبارًا من تاريخ محدد
SELECT TIMESTAMPDIFF(YEAR, dob, DATE('2026-02-23')) AS age_years
من الأشخاص؛
4) SQL Server: العمر بالسنوات (السنوات المكتملة)
النمط الشائع في SQL Server هو DATEDIFF مطروحًا منه شيك تاريخ الميلاد:
حدد
DATEDIFF(YEAR, dob, CAST(GETDATE() AS date))
- القضية
متى DATEADD(YEAR, DATEDIFF(YEAR, dob, CAST(GETDATE() AS date)), dob) > CAST(GETDATE() AS date)
ثم 1 آخر 0
تنتهي بعمر_سنوات
من الأشخاص؛
SQL Server: العمر اعتبارًا من تاريخ محدد
DECLARE @as_of date = '2026-02-23';
اختر
DATEDIFF(YEAR، dob، @as_of)
- القضية
متى DATEADD(YEAR, DATEDIFF(YEAR, dob, @as_of), dob) > @as_of
ثم 1 آخر 0
تنتهي بعمر_سنوات
من الأشخاص؛
5) مثال للعمر المحدد (سنوات وأشهر)
إذا كنت تريد عرضًا تقديميًا "دقيقًا" مثل "31 عامًا و4 أشهر"، فاحسب السنوات أولاً، ثم الأشهر بعد عيد الميلاد الأخير. فيما يلي مثال واحد لـ PostgreSQL:
مع القاعدة AS (
SELECT dob, CURRENT_DATE AS as_of
من الناس
)
اختر
استخرج (سنة من العمر (as_of، dob)) كسنوات،
استخرج (شهرًا من العمر (as_of، dob)) كأشهر
من القاعدة؛
المزالق الشائعة
- المناطق الزمنية: قم بتخزين تاريخ الميلاد كتاريخ
عندما يكون ذلك ممكنًا. يمكن أن تتغير أوقات التاريخ عبر المناطق. - أعياد الميلاد ذات الأيام الكبيسة: تحديد ما يحدث في السنوات غير الكبيسة. تتعامل معظم الأنظمة مع أعياد الميلاد 29-02-2004 على أنها 28-02 أو 01-03 وفقًا للسياسة.
- تاريخ ميلاد فارغ أو مستقبلي: مرشح أو حماية، بخلاف ذلكسيعرض استعلامك القيم الخالية أو القيم السالبة.
فحص سريع للسلامة
إذا كنت تريد التحقق من تاريخ ميلاد واحد بسرعة، يمكنك استخدام الآلة الحاسبة عبر الإنترنت: حساب العمر عبر الإنترنت.
أدلة ذات صلة
الأسئلة الشائعة
لماذا يعتبر YEAR(اليوم) ناقص YEAR(dob) خطأ؟
يتجاهل ما إذا كان عيد الميلاد قد حدث هذا العام أم لا، لذا فهو يبالغ في تقدير العمر قبل عيد الميلاد.
ما هو نوع SQL الأكثر أمانًا لتاريخ الميلاد؟
استخدم عمود التاريخ (وليس التاريخ والوقت) لتاريخ الميلاد إذا كنت تهتم فقط بيوم التقويم.