İlginizi Çekebilir
  1. Ana Sayfa
  2. SQL

T-SQL Yıl Ay ve Haftanın İlk ve Son Günlerini Bulmak

T-SQL Yıl Ay ve Haftanın İlk ve Son Günlerini Bulmak
SQL Yıl, Ay ve Haftanın İlk ve Son Günlerini
+ - 0

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

T-SQL Yıl, Ay ve Haftanın İlk ve Son Günlerini Bulmak

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

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)