Arbeiten mir Datumswerten

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

wagnbeu0
**
Beiträge: 47
Registriert: Fr, 23.04.2010 10:56

Arbeiten mir Datumswerten

Beitrag 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?
Benutzeravatar
herz4
****
Beiträge: 145
Registriert: Mi, 29.09.2010 13:41

Re: Arbeiten mir Datumswerten

Beitrag von herz4 »

Vielleicht sind's die Apostrophe um 90, die diese als String und nicht als Wert lesen lassen ...?
LinuxMint 13 maya, LibreOffice 4.1 mit externer HSQLDB 2.3.2
wagnbeu0
**
Beiträge: 47
Registriert: Fr, 23.04.2010 10:56

Re: Arbeiten mir Datumswerten

Beitrag von wagnbeu0 »

Leider nein, auch wenn ich die 90 als <90 hinschreibe, zeigt er mehr als 90 Tage in der Zukunft an.
Benutzeravatar
herz4
****
Beiträge: 145
Registriert: Mi, 29.09.2010 13:41

Re: Arbeiten mir Datumswerten

Beitrag von herz4 »

Dann trifft hoffentlich meine zweite Vermutung:
Ist die Reihenfolge der beiden Datums-Argumente in der Fkt. DATEDIFF richtig gewählt?
LinuxMint 13 maya, LibreOffice 4.1 mit externer HSQLDB 2.3.2
wagnbeu0
**
Beiträge: 47
Registriert: Fr, 23.04.2010 10:56

Re: Arbeiten mir Datumswerten

Beitrag 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.
Benutzeravatar
herz4
****
Beiträge: 145
Registriert: Mi, 29.09.2010 13:41

Re: Arbeiten mir Datumswerten

Beitrag 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.
LinuxMint 13 maya, LibreOffice 4.1 mit externer HSQLDB 2.3.2
wagnbeu0
**
Beiträge: 47
Registriert: Fr, 23.04.2010 10:56

Re: Arbeiten mir Datumswerten

Beitrag 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.
Neujuenger2010
**
Beiträge: 20
Registriert: Mo, 25.10.2010 18:31

Re: Arbeiten mir Datumswerten

Beitrag 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
Gruss Neujuenger2010

OOo 3.2.1 auf Vista
wagnbeu0
**
Beiträge: 47
Registriert: Fr, 23.04.2010 10:56

Re: Arbeiten mir Datumswerten

Beitrag 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 ...
Neujuenger2010
**
Beiträge: 20
Registriert: Mo, 25.10.2010 18:31

Re: Arbeiten mir Datumswerten

Beitrag 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?
Gruss Neujuenger2010

OOo 3.2.1 auf Vista
wagnbeu0
**
Beiträge: 47
Registriert: Fr, 23.04.2010 10:56

SOLVED: Arbeiten mir Datumswerten

Beitrag von wagnbeu0 »

Super, danke, das wars, jetzt klappt es.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Arbeiten mir Datumswerten

Beitrag 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.
wagnbeu0
**
Beiträge: 47
Registriert: Fr, 23.04.2010 10:56

Re: Arbeiten mir Datumswerten

Beitrag 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???
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Arbeiten mir Datumswerten

Beitrag 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
Antworten