Manchmal benötigt man für Reports oder statistische Auswertungen verschiedene Zeitspannen, bzw. Datumsgrenzen.
Im SQL-Server kann man dies auch über über eine Funktion lösen. Diese Function gibt 4 Datums (StartVorjahr, EndeVorjahr, Startjahr, Endejahr) in Form einer Tabelle zurück:
CREATE
FUNCTION fGetGrenzDaten
(
)
RETURNS @Daten
TABLE (
StartVorjahr datetime,
EndeVorjahr datetime,
StartJahr datetime,
EndeJahr datetime)
AS
BEGIN
Declare
@Tmp varchar(10)
Declare @Dat1 varchar(10)
Declare
@VorJahr datetime
Declare @VorJahrEnd datetime
Declare @Jahr datetime
Declare @JahrEnd datetime
Declare @Datum dateTime
Set @Datum = GETDATE()
---
Set
@Jahr = dateAdd(mm,-12,@Datum)
Set @Tmp = Right('0' + cast(Month(@Jahr) as varchar(2)),2)
Set @Dat1 = @Tmp + '-01-'
Set @Tmp = cast(year(@Jahr) as varchar(4))
Set @Dat1 = @Dat1 + @Tmp
Set @Jahr = convert(Datetime,@Dat1,110)
Set @JahrEnd = dateAdd(mm,-1,@Datum)
Set @Tmp = Right('0' + cast(Month(@JahrEnd) as varchar(2)),2)
Set @Dat1 = @Tmp + '-30-'
Set @Tmp = cast(year(@Datum) as varchar(4))
Set @Dat1 = @Dat1 + @Tmp
Set @JahrEnd = convert(Datetime,@Dat1,110)
Set @Vorjahr = dateAdd(yy,-1,@Jahr)
Set @VorjahrEnd = dateAdd(yy,-1,@JahrEnd)
Insert into @Daten
Select @Vorjahr,@VorjahrEnd,@Jahr,@JahrEnd
RETURN
END
Die Datums-Werte dieser Function lassen sich per INNER JOIN in einen SELECT einbinden:
inner
join (Select StartVorjahr, EndeVorjahr, StartJahr,
EndeJahr from fGetGrenzDaten()) as Datum on RECHDAT between StartVorjahr and EndeJahr