T-SQL Yıl Ay ve Haftanın İlk ve Son Günlerini Bulmak yazımdan herkese merhaba… Hep C# dersleri olmasın biraz T-SQL olsun dedim. Yakın zamanda yazılım dışında farklı konularda da yazılar atacağım. Lisede okuduğum bölüm olan Network konusunda da biraz yazı atmak istiyorum. Neyse konumuza geri dönelim. Bu konunun C# versiyonunu burada ve bir benzerini de burada vermiştim. Bu sefer bu işi SQL tarafında yapacağız…
T-SQL Yıl Ay ve Haftanın İlk ve Son Günlerini Bulmak
Bazen bize bir tarih bilgisi üzerinden çok farklı bilgiler gerekebilmektedir. Bu bazen zorunluluk olsa da bazen kullanıcı kolaylığı sağlamak için gereklidir. Bu yazımızda da sizlere bu konu hakkında bir içerik hazırlamak istedim. Başlıktan da anlayacağınız üzere tarih bilgisi üzerinden yılın, ayın ve haftanın ilk ve son günlerini bulacağız. Önce komutları vereceğim sonrasında da bu komutları nasıl kolayca kullanabiliriz ona bakacağız.
DECLARE @tarih DATETIME=GETDATE() SELECT 'Yılın İlk Günü',DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) UNION ALL SELECT 'Ayın İlk Günü',CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(@tarih)-1),@tarih),112) AS Date_Value UNION ALL SELECT 'Haftanın İlk Günü', DATEADD(ww, DATEDIFF(ww,0,GETDATE()), 0) UNION ALL SELECT 'Bugunun Tarihi',CONVERT(VARCHAR(10),@tarih,112) AS Date_Value UNION ALL SELECT 'Haftanın Son Günü', DATEADD(DAY,6, DATEADD(ww, DATEDIFF(ww,0,GETDATE()), 0)) 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 'Yılın Son Günü',DATEADD(dd,-1,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0)))
Komutlarımız bu şekildedir. Şimdi gelin bunları bir fonksiyon yapalım. Ama bu bir scalar fonksiyon olsun.
Şöyle yapalım. Bu fonksiyon iki parametre alsın. İlk parametresi tarih olsun. Geri dönecek bilgileri gönderdiğimiz tarihe göre yapsın. İkinci parametresi de kod olsun. 1 gönderdiğimizde yılın ilk gününü 2 gönderdiğimizde yılın son gününü dönsün. 3 gönderdiğimizde ayın ilk gününü 4 gönderdiğimizde ayın son gününü, 5 gönderdiğimizde haftanın ilk gününü 6 gönderdiğimizde de haftanın son gününü dönsün.
Şimdi fonksiyonumuza bakalım.
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create FUNCTION fn_TarihselBilgileriVer ( @tarih as datetime ,@kod as int ) RETURNS datetime AS BEGIN declare @sonuc as datetime set @sonuc = ( select case @kod when 1 then DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) -- yilin ilk günü when 2 then DATEADD(dd,-1,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))) -- yilin son günü when 3 then CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(@tarih)-1),@tarih),112) -- ayın ilk günü when 4 then CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(DATEADD(mm,1,@tarih))),DATEADD(mm,1,@tarih)),112) -- ayın son günü when 5 then DATEADD(ww, DATEDIFF(ww,0,GETDATE()), 0) -- haftanın ilk günü when 6 then DATEADD(DAY,6, DATEADD(ww, DATEDIFF(ww,0,GETDATE()), 0)) -- haftanın son günü else @tarih end as Tarih) RETURN @sonuc END GO
Evet, scalar fonksiyonumuz bu kadardı. Şimdi gelin kullanımına ve geri dönüş değerlerine bakalım
Gördüğünüz gibi kodlarımız enfes çalışıyor. Siz burada kod parametresini nvarchar yaparak kod yerine direk isimleri ile de kullanabilirsiniz. Tabi fonksiyondaki case when kısımlarındaki kodları da değiştirmeyi unutmayın.
Bu yazımda bu kadar arkadaşlar. Diğer sql yazılarımızda görüşmek üzere…
Microsoft SQL Server & T-SQL Eğitim Seti ders listesi için tıklayınız. Buradan C# Eğitim Setimde yayınladığım Github projeme ulaşabilirsiniz.
Silinen yazılarımla birlikte bu yazı sitemdeki 501. yazıdır. 3 yıldır tek başıma 500 adet yazı yazmışım. Vay beeee.
Bol kodlu günler. :)