Vinzenz Mai: SQL, Datumsfunktionen

Beitrag lesen

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