SQL: Feststellen, ob ein Jahr ein Schaltjahr ist

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Neben einer rein mathematischen Lösung kann man auch den Tag vor dem 1. März desselben Jahres auswerten, und mit 28 vergleichen.

Lösung für Jet-SQL

Um die folgenden Abfragen selbst testen zu können, wird die Tabelle dual in der Datenbank benötigt.

Als Ausgangsbasis verwenden wir folgende Abfrage vw_jahr mit Jahreswerten, von der wir wissen wollen, ob das Jahr ein Schaltjahr ist.

SELECT 1900 AS jahr FROM dual
UNION  ALL
SELECT 1901 FROM dual
UNION  ALL
SELECT 2000 FROM dual
UNION  ALL
SELECT 2004 FROM dual
UNION  ALL
SELECT Year(Date()) FROM dual
SELECT jahr & ' ist ' & IIf( Day( DateSerial( jahr, 3, 0 ) ) = 28,
                             'k' ) & 'ein Schaltjahr' AS info
FROM   vw_jahr

Lösung für PostgreSQL

CREATE VIEW vw_jahr ( jahr ) AS (
    VALUES (1900), (1901), (2000), (2004), (date_part( 'year', CURRENT_DATE )) );
 
SELECT jahr || ' ist ' || CASE WHEN date_part( 'day', make_date( jahr::INTEGER, 3, 1 ) - 1) = 28
                               THEN 'k' ELSE '' END || 'ein Schaltjahr' AS info
FROM   vw_jahr
info
1900 ist kein Schaltjahr
1901 ist kein Schaltjahr
2000 ist ein Schaltjahr
2004 ist ein Schaltjahr
2018 ist kein Schaltjahr



Zurück zur Übersicht