Fortlaufende Datumszeilen per SQL generieren

 
Bewertung:  / 1
SchwachSuper 

In manchen Fällen benötige ich ein zeitliches Intervall in einem SELECT Statement. Da man aber nur Daten abfragen kann die auch da sind, muss ich mir das zeitliche Intervall künstlich schaffen.

Hierfür verwendet ich eine Common Table Expression (CTE), die in einer Rekursion zwischen Anfangs- und Endwert mir die Intervalle als Zeilen generiert. Der SQL-Server wird hier im Standard bei einer Rekursionstiefe von 100 abbrechen. Mit einem zusätzlichen option Parameter kann das abgeschaltet werden.

Das folgende Beispiel generiert eine Sicht mit den Tagen zwischen 1900 und 2100. Diese binde ich dann per JOIN in meine Abfrage ein.

CREATE VIEW vAllDays 
AS
With DateSequence as
( 
    Select CAST('19000101' as datetime) as D 
        union all
    Select dateadd(day, 1, D) 
        from DateSequence 
        where D < '21000101'
) 
SELECT * FROM DateSequence

Eine Verwendung mit option Parameter könnte dann so aussehen.

select * from Table1
INNER JOIN vAllDays
on D >= date1 and D <= date1
option (maxrecursion 0)