İki Tarih Arasındaki Tarihleri Listeleme
İki tarih aralığında tuttuğumuz verileri günlük olarak kayıt altına almak isteyebileceğimiz durumlar olabilir.
Belli tarih aralığındaki kampanya verileri, bir çalışanın izin verileri, hedef-prim verileri gibi verileri raporlamada günlük olarak incelemek istediğimizde date kurguları modelde soruna yol açabilir. Bu yüzden bazı müdahaleler yapılması gerekir.
SQL Database’de aşağıdaki şekilde StartDate,EndDate tarihleri ve arasındaki gün sayısını tuttuğumuz bir tablomuz var.
Aşağıdaki tablo gibi görünmesi için database tarafında ne yapabiliriz onu inceleyeceğiz.
Cursor kullanarak tablomuzdan verileri satırsal alacağız. Daha sonrasında Fetch Next kullanarak döngü oluşturacağız. Döngüde yapacağımız işlemler sonrası, verileri yeni oluşturacağımız tabloya insert edeceğiz. Aşağıda kodları inceleyebilirsiniz. İyi çalışmalar!
DECLARE @X_No int
,@StartDate DATETIME
,@EndDate DATETIME
,@Dates DATETIME
--Cursor veriyi satırsal getirmek için kullanılır.
DECLARE XCursor CURSOR FOR
SELECT X_No,[Start Date],[End Date] FROM [dbo].[X_Dates]
ORDER BY X_No;
OPEN XCursor;
FETCH NEXT FROM XCursor
INTO @X_No,@StartDate,@EndDate; --İlk dönen satırı tabloya atması için
WHILE @@FETCH_STATUS = 0
BEGIN
WHILE(@StartDate<=@EndDate)
BEGIN
SET @Dates=@StartDate
INSERT INTO dbo.XAllDates (XNo,Dates,Day) --Verileri aktaracağımız yeni tablo
SELECT @X_No,@Dates,1
SELECT @StartDate=dateadd(day,1,@StartDate) --Dates alanı
END
--Diğer satıra geçer
FETCH NEXT FROM XCursor
INTO @X_No,@StartDate,@EndDate
END
CLOSE XCursor;
DEALLOCATE XCursor; --Cursor için ayrılan belleği boşaltır