Sql Server Tarih Listeleme Etiketli Yazılar

Saat, Gün, Ay ve Yıl şeklinde Dinamik Tarih Tablosu oluşturma

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.