Yaş Al
Bazı nedenlerden dolayı, tarihlerin karşılaştırıldığı çok sayıda projeye benziyoruz. Bu süre zarfında, bu verilerin bütünlüğünü sağlamak ve hızlandırmak için bir dizi fonksiyon geliştirdik.
Bunu yaratmamızın nedeni, artık bir yılda doğmuş bir yaşta çalışmanın bir gün varyansla sonuçlanabilmesiydi. Artık yılda 29/02, 01/03 ile aynı gün.
İki tarih kullanıyoruz, çünkü yaş için gereken zamanı (ölüm tarihi gibi) geri yüklemenizi sağlar ve yalnızca boş bırakıldığında geçerli tarihte varsayılan değerdir.
Tekerleği yeniden icat etmeye inanmadığımız için, kodumuzu faydalı bulabilecek herkes için burada bıraktık. Bu, aşağıda bağlı ikincil bir işlev gerektirir.
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')
Şimdiye kadar yapılan testlerde herhangi bir anormallik ortaya çıkmadı, ancak bulursanız lütfen bize bildirin.