الحصول على العمر
استخدم دالة لحساب عمر شخص ما في أي وقت.
لسبب ما يبدو أننا في نهاية المطاف على كمية ضخمة من المشاريع حيث تتم مقارنة التواريخ. خلال هذا الوقت قمنا بتطوير عدد من الوظائف لتسريع وضمان سلامة هذه البيانات.
السبب الذي جعلنا ننشئ هذا هو أن العمل في عصر ولد فيه شخص ما في سنة كبيسة قد ينتهي بتنوع يوم واحد. في سنة كبيسة ، 29/02 هو نفس اليوم من العام مثل 01/03.
نحن نستخدم تاريخين ، حيث أنه يمكّنك من تأجيل الوقت الذي طلبت فيه العمر ، (مثل تاريخ الوفاة) ، والإعداد الافتراضي فقط في التاريخ الحالي إذا ترك فارغًا.
نظرًا لأننا لا نؤمن بإعادة اختراع العجلة ، فقد تركنا الكود الخاص بنا هنا لأي شخص قد يجدها مفيدة. هذا يتطلب وظيفة ثانوية مرتبطة أدناه.
CREATE FUNCTION Dates.GetAge(@Date DATETIME2,@Until DATETIME2) RETURNS INT AS BEGINIF @Until IS NULL SET @Until=CONVERT(DATE,GETDATE())DECLARE @Age INT=DATEDIFF(YEAR,@Date,@Until)+(CASE WHEN DATEPART(DAYOFYEAR,@Date)>(DATEPART(DAYOFYEAR,@Until)+(CASE WHEN dbo.GetLeapYear(@Until)=1 AND DATEPART(DAYOFYEAR,@Until)>59 THEN -1 ELSE 0 END))THEN -1 ELSE 0 END)RETURN @AgeENDGO
SELECT Dates.GetAge('2011-02-28','2013-02-27'),Dates.GetAge('2011-02-28','2013-02-28'),Dates.GetAge('2011-02-28','2013-03-01'),Dates.GetAge('2011-02-28','2013-03-02')SELECT Dates.GetAge('2011-02-28','2012-02-27'),Dates.GetAge('2011-02-28','2012-02-28'),Dates.GetAge('2011-02-28','2012-02-29'),Dates.GetAge('2011-02-28','2012-03-01')SELECT Dates.GetAge('2012-02-28','2013-02-27'),Dates.GetAge('2012-02-28','2013-02-28'),Dates.GetAge('2012-02-28','2013-03-01'),Dates.GetAge('2012-02-28','2013-03-02')SELECT Dates.GetAge('2012-02-29','2013-02-27'),Dates.GetAge('2012-02-29','2013-02-28'),Dates.GetAge('2012-02-29','2013-03-01'),Dates.GetAge('2012-02-29','2013-03-02')
لم يكشف الاختبار حتى الآن عن أي حالات شاذة ، ولكن يرجى إخبارنا إذا وجدت.