Ayın belirli günlerini içeren dinamik bir tarih tablosu oluşturmak için aşağıya ekleyeceğim kısa sorgu işimizi görecektir. Ben sorguda dinamik tarih tablosunu bir değişken olarak kullandım. Siz de isterseniz bir sorgunun içinde değişken olarak, veya bu dinamik tarih tablosu sorgusunu bir “table function” a çevirerek yada bir tabloya yazdırarak da kullanabilirsiniz. Şimdi sorgumuza geçelim…
--== Burada tarih aralığımızı seçiyoruz. İster elle isterseniz tarih fonksiyonlarını
--== kullanarak yine dinamik olarak belirleyebilirsiniz.
DECLARE @firstdate date='20220101'
DECLARE @lastdate date='20221231'
--== Tarih aralığımızı belirledikten sonra tarih tablosunda sadece cuma günleri ve
--== ay sonlarının olmasını istediğim için aşağıdaki değişkenleri oluşturdum.
--== Gün adı 'Friday', Ayın sonu için ise şartı döngü içerisinde vereceğiz.
DECLARE @day_name nvarchar(10)='Friday'
DECLARE @id int=1
--== Tarih tablo değişkenini oluşturuyoruz.
DECLARE @date_table TABLE (id_ int,date_ date,year_ int,month_ smallint,day_ smallint)
--== Döngümüzü başlatıyoruz...
WHILE @firstdate<=@lastdate
BEGIN
IF
DATENAME(WEEKDAY,@firstdate)=@day_name --Hafta adı 'Friday' ise
OR
@firstdate=EOMONTH(@firstdate) -- Tarih ayın son tarihi ise
--== Şart doğru ise tarihi tablomuza insert ediyoruz ve tarihe bir gün ekliyoruz.
BEGIN
INSERT INTO @date_table(id_,date_,year_,month_,day_)
SELECT @id ,@firstdate ,YEAR(@firstdate) ,MONTH(@firstdate) ,DAY(@firstdate);
SET @firstdate=DATEADD(DAY,1,@firstdate)
SET @id=@id+1
END
--== Tarih şartları sağlamıyor ise sadece ilk tarihe bir gün ekliyoruz.
ELSE
BEGIN
SET @firstdate=DATEADD(DAY,1,@firstdate)
END
END
Şimdi sorgumuzun çıktısına bakalım.
Sizde yukarıdaki sorguyu kendi ihtiyaçlarınıza göre geliştirerek istediğiniz dinamik tarih tablosunu kolayca elde edebilirsiniz. Umarım paylaşımı beğenmişsinizdir. Bir sonraki yazıda görüşmek üzere…