Hi,
mir fehlt gerade etwas das Einfühlungsvermögen. Könntest du mal ein Datenbeispiel (Input und gewünschter Output) mit diesem Schuljahrbeginn geben?
SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 112),5, 4) < '0201'
Wenn Substring nun mal (theoretischerweise) '201' ergibt, dann geht die Verzweigung nicht mehr so gut auf. Es ist ungeeignet Datumsangaben als (Teil)Strings miteinander zu vergleichen. Nutze dazu besser die Funktionen wie DAY, MONTH, YEAR, DATEPART usw
Wir haben heute den 4.10., das ist grösser als 1.8. weil der Monat grösser ist, oder. D.h. du könntest jetzt einfach das nächste Schulhalbjahrbeginndatum ermitteln:
-- @newDate ist eine Variable
DECLARE @newDate datetime
SELECT @newDate =
CASE
WHEN MONTH(GETDATE()) > 8
THEN CONVERT(datetime,
CAST((YEAR(GETDATE()) + 1) as varchar(4)) + '-02-01',
120)
ELSE CONVERT(datetime,
CAST(YEAR(GETDATE()) as varchar(4)) + '-08-01',
120)
END
Statt GETDATE() kannst du natürlich auch die ende oder ende_korr oder COALESCE(ende_korr, ende) einsetzen. Und irgendwie müsstest du auch noch ermitteln ob das ende in der Zukunft liegt, was aber relativ trivial ausfallen dürfte.
Cheers, Frank