Uygulama geliştirirken, rapor sorgularında, raporların grafiksel sunumunda, tablomuzda kullanılmamış tarih birimlerini listelemek, rapora dahil etmek isteyebiliriz.
Aşağıdaki SQL function sayesinde belirlediğimiz iki tarih-saat arasındaki tüm saatleri, günleri, ayları ve yılları bir tablodan sonuç döndürür gibi listeyebilirsiniz.
Function ı oluşturmanız için gerekli create sorgusu:
CREATE Function [dbo].[TarihTablosu] ( @baslangic datetime, @bitis datetime, @tur char(5) --'saat', 'gün', 'ay', 'yıl' değerlerini alabilir.Default değer 'gün' dür. ) Returns @Result Table ( [Tarih] datetime ) As Begin Declare @bugun datetime Set @bugun=@baslangic While @bugun<=@bitis Begin Insert Into @Result Values (@bugun) Select @bugun= Case When @tur='yıl' Then DateAdd(yy,1,@bugun) When @tur='ay' Then DateAdd(mm,1,@bugun) When @tur='saat' Then DateAdd(hh,1,@bugun) Else DateAdd(dd,1,@bugun) End End Return End GO
Kullanımı:
set dateformat dmy Select tarih From dbo.TarihTablosu('01.01.2010','01.05.2010','ay')
Bu örnek sorgu 5 farklı ayı tarih sonucu şeklinde döndürecektir.
Result:
2010-01-01 00:00:00.000
2010-02-01 00:00:00.000
2010-03-01 00:00:00.000
2010-04-01 00:00:00.000
2010-05-01 00:00:00.000
Rapor sorgularınızda, kendi tablonuzu, bu function tablosuna left join olarak ilişkilendirerek
sonuç dönmeyen tarihlerinizi raporda 0 olarak gösterebilir ve daha pek çok amaçla bu functionu kullanabilirsiniz.
Bir örnekte saat ile ilgili yapalım:
set dateformat dmy Select tarih From dbo.TarihTablosu('04.05.2010',GETDATE(),'saat')
Bu sorgu ilede bugün, şu ana kadar geçen saat dilimlerini listeliyoruz.
Result:
2010-05-04 00:00:00.000
2010-05-04 01:00:00.000
2010-05-04 02:00:00.000
Benzer şekilde günleri ve yılları tablo olarak döndürebilirsiniz.
Bunu arıyorum nette 2 saattir, oldukça pratik bir yöntem, teşekkürler.
SQL Server yazılarınız artık takibimde hocam, selamlar.