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. :)