Frage stellen
0

Wert in Datum wandeln

gefragt 2019-05-09 12:00:34 +0200

Bus Gravatar-Bild

updated 2019-05-09 13:28:05 +0200

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

Bearbeiten Tags ändern Melden schließen vereinen löschen

1 Antwort

0

geantwortet 2019-05-09 16:31:14 +0200

RobertG Gravatar-Bild

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.

Bearbeiten Melden löschen Link mehr

Kommentare

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

Bus Gravatar-BildBus ( 2019-05-09 16:50:47 +0200 )Bearbeiten
1

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.

karolus Gravatar-Bildkarolus ( 2019-05-09 18:30:42 +0200 )Bearbeiten

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.

RobertG Gravatar-BildRobertG ( 2019-05-09 21:04:44 +0200 )Bearbeiten

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

Bus Gravatar-BildBus ( 2019-05-10 10:25:21 +0200 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2019-05-09 12:00:34 +0200

Angesehen: 34 Mal

Aktualisiert: May 09