Wert in Datum wandeln

Moin,
ich möchte in einer BASE Anwendung so wenig wie möglich Eingaben machen. Ich benötige aber die Anzahl der Tage im Jahr.

Ich habe also als Eingabe nur das JAHR. Beispiel 2019
Jetzt möchte ich die Anzahl der Tage in dem Jahr ermitteln.
Eine Möglichkeit wäre ja das in zwei Spalten das Datum ermitteln,

??? (“01.01.”+Year(Datum)) As “Datetime1” und ??? (“31.12”+Year(Datum)) AS “Datetime2” und dann die Differenz mit DATEDIFF(string, datetime1, datetime2) zu ermitteln.
HSQLDB
Danke

Bus

Datumsangaben folgen immer dem Standard von SQL:

SELECT "Jahr", CAST("Jahr"||'-01-01'  AS DATE) AS "Date1" FROM "Tabelle"

Dies gibt das Startdatum des Jahres wieder. Die Abfrage zeigt, da sie von der Formatierung nichts weiß, das Ganze als Integer-Wert.

Die Differenz ermittelst Du mit Hilfe von

DATEDIFF('day', "Date1", "Date2")

Also insgesamt nur mit dem DIFF:

SELECT "Jahr", DATEDIFF('day', CAST( "Jahr"||'-01-01'  AS DATE) , CAST("Jahr"||'-12-31'  AS DATE) ) AS "Diff" FROM "Tabelle"

Das gibt bei mir z.B. für das Jahr 2019 364 Tage, da ja nicht das komplette Jahr bis zum 1.1.2020 drin ist.

Super und Danke. wo hätte ich die Funktion CAST(“Jahr”||’-01-01’ AS DATE) finden können, ich habe auch bei Base im Anhang gesehen aber nicht gefunden.
Das Thema mit den einen Tag ist ja bekannt, man muss ja nur am Ende +1 setzen und dann bekomme ich die 365 Tage
SELECT “Jahr”, DATEDIFF(‘day’, CAST( “Jahr”||’-01-01’ AS DATE) , CAST(“Jahr”||’-12-31’ AS DATE) )+1 AS “Diff” FROM “Tabelle”

Aber Danke noch einmal

Hallo

Wäre das nicht auch mit einem simplen Schaltjahrtest möglich, aka:

SELECT 365 + (("Jahr" % 100 != 0 AND "Jahr" % 4 = 0) OR "Jahr" % 400 = 0)  AS "Diff" FROM "Tabelle"

ups, da muss natürlich mit 365 addiert werden.

Die Funktion CAST gehört zu den Systemfunktionen und ist im Anhang des Handbuches (aktuell S. 559) beschrieben. Taucht auch speziell zur Erzeugung von Datumslisten unter “Tage zu Datumswerten addieren” auf.

Natürlich könnte auch nach Schaltjahren gesucht werden. Nur funktioniert die obige Abfrage in Base mit der internen HSQLDB so nicht (müsste mit CASE WHEN … und der Funktion MOD(a,b) gehen) und die Datediff-Funktion beinhaltet die Möglichkeit, auch mit völlig anderen Datumswerten zu arbeiten, die allerdings in der Ausgangsfrage nicht nachgefragt wurden.

Hi Robert,
im kplt. Handbuch habe das jetzt auch gefunden. Danke für den Hinweis und tolle Hilfe. Dein Vorschlag funktioniert in der DB sehr gut.
Gruß Bus