افزایش سن
به دلایلی به نظر می رسد ما به پروژه های عظیمی پایان می دهیم که تاریخ ها با هم مقایسه می شوند. در این مدت ما چندین کارکرد برای سرعت بخشیدن و اطمینان از صحت این داده ها ایجاد کرده ایم.
دلیل ایجاد این مسئله این بود که کار کردن در دورانی که شخصی در سال کبیسه به دنیا بیاید می تواند یک روزه واریانس داشته باشد. در یک سال پرش ، 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')
آزمایش تاکنون هیچ ناهنجاری را آشکار نکرده است ، با این وجود لطفاً در صورت یافتن اطلاعات را به ما اطلاع دهید.