Fortlaufende Datumszeilen per SQL generieren
- Details
- Veröffentlicht am Samstag, 08. November 2014 21:34
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)