Hallo Ilja,
neben der 1 war auch noch ein Logik-fehler bei mir oder sind eventuell noch mehrere versteckt. hier mal die letzte, die ich schnell ausprobiert habe...
select
CASE
WHEN GETDATE() < '01.02.' + CAST(YEAR(GETDATE()) AS CHAR)
THEN '01.02.' + CAST(YEAR(GETDATE()) AS CHAR)
WHEN GETDATE() BETWEEN '01.02.' + CAST(YEAR(GETDATE()) AS CHAR) AND '01.08.' + CAST(YEAR(GETDATE()) AS CHAR)
THEN '01.08.' + CAST(YEAR(GETDATE()) AS CHAR)
ELSE '01.02.' + CAST(YEAR(GETDATE()) + 1 AS CHAR)
END
meine Version nimmt explizites Umwandeln vor, um sich länderspezifische
Probleme zu ersparen. Sie liefert einen DATETIME-Wert zurück.
Weiterhin nutze ich die Eigenschaft (Zitat aus der Doku):
Der result_expression-Ausdruck des ersten Boolean_expression-Ausdrucks, der zu TRUE ausgewertet wird, wird zurückgegeben.
und verzichte daher auf BETWEEN, wobei BETWEEN schöner die Teilung des Jahres
in drei Abschnitte widerspiegelt.
Ich gehe davon aus, dass am 01.02. der 01.02. auch noch als Einschulung erlaubt ist.
SELECT
Einschulung = CASE
WHEN SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 112),5, 4) < '0202'
THEN CONVERT(DATETIME, CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '0201', 112)
WHEN SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 112),5, 4) < '0802'
THEN CONVERT(DATETIME, CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '0801', 112)
ELSE
CONVERT(DATETIME, CAST(YEAR(GETDATE()) + 1 AS VARCHAR(4)) + '0201', 112)
END
Freundliche Grüße
Vinzenz