Microsoft SQL Server’da tarih işlemlerinin çok sık yapılmasından ve değişik biçimlere ihtiyaç duyulmasından dolayı SQL Server çok çeşitli tarih fonksiyonlarına içinde barındırır. Çoğu uzman kullanıcıda bunları bilir ve kullanır. Ama öyle zaman bir gelir ki var olan tarih fonksiyonları istediğimiz sonuç için yetersiz kalabilir. Bu yüzden ihtiyaç duyulan tarih değerlerinin yada biçimlerinin elde edilmesi için farklı yöntemler kullanılabiliriz. Hayal gücünüze ve ihtiyacınıza göre sizlerde bu örneklerden yola çıkarak çözümler üretebilirsiniz.
Örneğin geçen karşılaştığım bir uygulamadan içinde bulunduğumuz ayın ilk günü aşağıdaki gibi hesaplanmıştı(!).
SELECT ’01’+CONVERT(VARCHAR,datepart(MONTH,GETDATE()))+CONVERT(VARCHAR,datepart(YEAR,GETDATE())) TARIH
Bu yüzden sık ihtiyaç duyulan ayın ilk günü, ayın son günü, sonraki ayın ilk günü veya önceki ayın son günü değerleri nasıl elde edebileceğimize değinelim istedim.
Aslında basit bir yöntem kullanacağız. Örneğin bugünün 22.05.2013 olduğunu düşünürsek ayın ilk günü bulmak için öncelikle bu tarihin ayın kaçıncı günü olduğu DAY fonksiyonu ile bulup daha sonra çıkan gün kadar eksi gün sayısını elimizdeki tarih değerine eklersek ayın ilk gününü bulmuş oluruz. Şimdi bugünün tarihini baz alarak örneklerimizi yapalım.
DECLARE @tarih DATETIME=GETDATE() SELECT 'Onceki Ayın Son Gunu' Aciklama,CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(@tarih)),@tarih),112) Tarih UNION ALL SELECT 'Ayın İlk Günü',CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(@tarih)-1),@tarih),112) AS Date_Value UNION ALL SELECT 'Bugunun Tarihi',CONVERT(VARCHAR(10),@tarih,112) AS Date_Value UNION ALL SELECT 'Ayın Son Günü',CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(DATEADD(mm,1,@tarih))),DATEADD(mm,1,@tarih)),112) UNION ALL SELECT 'Sonraki Ayın İlk Günü',CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(DATEADD(mm,1,@tarih))-1),DATEADD(mm,1,@tarih)),112) UNION ALL SELECT 'Haftanın İlk Günü', DATEADD(ww, DATEDIFF(ww,0,GETDATE()), 0) UNION ALL SELECT 'Sonraki Haftanın İlk Günü', DATEADD(ww, DATEDIFF(ww,0,GETDATE())+1, 0) UNION ALL SELECT 'Yılın İlk Günü',DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) UNION ALL SELECT 'Yılın Son Günü',DATEADD(dd,-1,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0)))
Sonuç;