Seite 1 von 1
Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 10:07
von wagnbeu0
Hallo, ich habe eine Tabelle mit Datumswerten. Nun möchte ich aus der Tabelle alle Werte, die 90 Tage in der Zukunft liegen. Dazu hatte ich bislang folgende Abfrage:
Code: Alles auswählen
SELECT "Vortragsplan"."Datum" AS "Datum", "Vortragsplan"."Name" AS "Redner", DAYOFYEAR( "Datum" ) - DAYOFYEAR( CURDATE( ) ) AS "TAGE" FROM "Vortragsplan" WHERE "TAGE" > 0 AND "TAGE" < 90 ORDER BY "Datum" ASC;
Damit werden aber nur Werte aus dem aktuellem Jahr angezeigt. Also habe ich die Abfrage so abgeändert:
Code: Alles auswählen
SELECT "Vortragsplan"."Datum" AS "Datum", "Vortragsplan"."Name" AS "Redner" FROM "Vortragsplan" WHERE "Datum" > curdate( ) AND DATEDIFF( 'dd', "Vortragsplan"."Datum", CURDATE( ) ) <'90' ORDER BY "Datum" ASC;
Jetzt werden mir zwar Werte in der Zukunft angezeigt, jedoch auch dann, wenn das DAtum mehr als 90 Tage in der Zukunft liegt. Habe ich hier eine Denkfehler?
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 10:29
von herz4
Vielleicht sind's die Apostrophe um 90, die diese als String und nicht als Wert lesen lassen ...?
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 10:36
von wagnbeu0
Leider nein, auch wenn ich die 90 als <90 hinschreibe, zeigt er mehr als 90 Tage in der Zukunft an.
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 11:37
von herz4
Dann trifft hoffentlich meine zweite Vermutung:
Ist die Reihenfolge der beiden Datums-Argumente in der Fkt. DATEDIFF richtig gewählt?
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 13:48
von wagnbeu0
Ja, die Reihenfolge ist richtig, wobei es auch keine Rolle spielt, wie das Datum ermittelt wird.
Ist bekannt, ab wann OpenOffice Base bzw. die HSQLDB mit Datumswerten rechnen kann? In anderen SQL-DB´s geht das so wunderbar einfach... select * from tabelle where wert <sysdate +90
Das würde einiges erleichtern.
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 15:23
von herz4
Ich habe Deine Antwort mal überprüft: bei mir liefert DATEDIFF('dd', A, B) negative Werte wenn A>B.
Entsprechend dürfte Dein DATEDIFF stets nur negative Werte liefern die allesamt unter 90 liegen.
Manchmal kommt's doch auf die richtige(!) Reihenfolge an.
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 15:34
von wagnbeu0
Ja, wenn ich die Werte vertausche, bekomme ich Werte aus der Vergangenheit. Was aber nicht klappt, ist, die werte einzugrenzen, da hier die Differenz nicht beachtet wird.
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 15:46
von Neujuenger2010
wagnbeu0 hat geschrieben:Ja, wenn ich die Werte vertausche, bekomme ich Werte aus der Vergangenheit. Was aber nicht klappt, ist, die werte einzugrenzen, da hier die Differenz nicht beachtet wird.
In einem Mini-Test funktioniert bei mir (OOo 3.2.1, Vista), wenn ich Deine neue Abfrage aus dem ersten Post nehme und <'90' durch >-90 ersetze. Da bekomme ich dann auch keine Werte aus der Vergangenheit. hth
Gruss
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 15:53
von wagnbeu0
Sehr seltsam. Die Syntax müsste absolut korrekt sein, da ich definitiv nur werte aus der Zukunft angezeigt bekomme. Jedoch scheint die DATEDIFF-Funktion nicht beachtet zu werden...
Noch so ne Idee: Die Spalte Datum wurde als DATE angelegt, hätte ich hier TIMESTAMP nehmen müssen? Aber die Zeit benötige ich eigentlich nicht ...
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 16:00
von Neujuenger2010
Hast Du mal
Code: Alles auswählen
SELECT "Vortragsplan"."Datum" AS "Datum", "Vortragsplan"."Name" AS "Redner" FROM "Vortragsplan" WHERE "Datum" > curdate( ) AND DATEDIFF( 'dd', "Vortragsplan"."Datum", CURDATE( ) ) > -90 ORDER BY "Datum" ASC;
probiert?
SOLVED: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 16:05
von wagnbeu0
Super, danke, das wars, jetzt klappt es.
Re: Arbeiten mir Datumswerten
Verfasst: Do, 28.10.2010 16:18
von DPunch
Aloha
wagnbeu0 hat geschrieben:Sehr seltsam. Die Syntax müsste absolut korrekt sein, da ich definitiv nur werte aus der Zukunft angezeigt bekomme. Jedoch scheint die DATEDIFF-Funktion nicht beachtet zu werden...
Wenn Du Deine WHERE-Klausel mal anschaust, ist es nun wirklich nicht "seltsam", dass Du nur Werte aus der Zukunft angezeigt bekommst.
wagnbeu0 hat geschrieben:Ja, die Reihenfolge ist richtig, wobei es auch keine Rolle spielt, wie das Datum ermittelt wird.
Aus der HSQL-DB Doku:
DATEDIFF(string, datetime1, datetime2)
returns the count of units of time elapsed from datetime1 to datetime2. The string indicates the unit of time and can have the following values 'ms'='millisecond', 'ss'='second','mi'='minute','hh'='hour', 'dd'='day', 'mm'='month', 'yy' = 'year'. Both the long and short form of the strings can be used.
Du siehst: Deine Reihenfolge ist *nicht* richtig und es spielt sehr wohl eine Rolle, wie das Datum ermittelt wird. herz4 hat Dir also schon in seinem zweiten Beitrag die Lösung genannt.
Re: Arbeiten mir Datumswerten
Verfasst: Fr, 29.10.2010 07:04
von wagnbeu0
DAs hatte ich ja bereits getauscht: Auf die Syntax "> -90" wäre ich aber nie gekommen, muss ich gestehen: Größer Minus 90???
Re: Arbeiten mir Datumswerten
Verfasst: Fr, 29.10.2010 10:40
von DPunch
Aloha
wagnbeu0 hat geschrieben:Das hatte ich ja bereits getauscht
Offensichtlich nicht, denn die Abfrage
Code: Alles auswählen
SELECT "Vortragsplan"."Datum" AS "Datum", "Vortragsplan"."Name" AS "Redner" FROM "Vortragsplan" WHERE "Datum" > curdate( ) AND DATEDIFF( 'dd', CURDATE( ), "Vortragsplan"."Datum" ) < 90 ORDER BY "Datum" ASC;
funktioniert.
wagnbeu0 hat geschrieben:Auf die Syntax "> -90" wäre ich aber nie gekommen, muss ich gestehen: Größer Minus 90???
Das ist nur Folge davon, dass Du eben *nicht* getauscht hattest.
Die DATEDIFF zwischen einem Datum in der Zukunft und dem heutigen Datum ist *immer* eine negative Zahl, zumindest bei der Reihenfolge, die Du in Deiner DATEDIFF-Funktion verwendest.
DATEDIFF dd Morgen Heute = -1
DATEDIFF dd Heute Morgen = 1