Seite 1 von 1

DATEDIFF Syntax Error

Verfasst: Mo, 05.01.2015 18:15
von sheepfriend
Hallo,
ich erstelle im Moment eine Datenbank, wobei es um ein Kreditinstitut gedanklich geht. Ich möchte eine Abfrage erstellen, bei der ich nach den Kunden suchen, die bis zum heutigen Datum noch ausstehende Raten haben.
Bisher sieht das so aus: ... AND SELECT "Finanzdaten"."Eingangsdatum" FROM "Finanzdaten" WHERE DATEDIFF( 'dd', CURRENT_TIME, "Finanzdaten"."Eingangsdatum")>31

Nur ist dort ein Syntax Fehler drin, den ich nicht finde.
Als genauere Fehlermeldung: Not a condition in statement

Bitte schhnelle Hilfe!

Re: DATEDIFF Syntax Error

Verfasst: Mo, 05.01.2015 22:00
von RobertG
Hallo sheepfriend,

genauere Fehlermeldung: Not a condition in statement - wo ist das komplette Statement?

Code: Alles auswählen

... AND SELECT "Finanzdaten"."Eingangsdatum" FROM ...
AND ist ein Bindewort innerhalb der Bedingungsdefintion einer Abfrage. Ohne die gesamte Abfrage gesehen zu haben (oder zumindest ein bisschen mehr von dem, was sich vor dem AND befindet) lässt sich da schon einmal wenig sagen.

Gruß

Robert

Re: DATEDIFF Syntax Error

Verfasst: Mo, 05.01.2015 22:13
von F3K Total
Hallo,
ins Blaue geschossen, versuche besser

Code: Alles auswählen

CURRENT_DATE
oder

Code: Alles auswählen

CURRENT_TIMESTAMP
statt

Code: Alles auswählen

CURRENT_TIME
um mit einem Datum zu vergleichen.
Gruß R

Re: DATEDIFF Syntax Error

Verfasst: Mo, 05.01.2015 22:39
von sheepfriend
SELECT "Finanzdaten"."Kreditnummer", "Finanzdaten"."eingegangene Raten", "Finanzdaten"."Eingangsdatum", "Kundendaten"."Vorname", "Kundendaten"."Nachname", "Kundendaten"."Wohnort", "Kundendaten"."Straße, Nr " FROM "Finanzdaten", "Kundendaten", "Kontodaten" WHERE "Finanzdaten"."Kundennummer" = "Kundendaten"."Kundennr." AND "Kontodaten"."Kreditnummer" = "Finanzdaten"."Kreditnummer"

Das ist das vorher, aber das ist definitiv richtig, da ich das zunächst mit dem Assistenten erstellt habe und er das sozusagen selber geschrieben hat

Re: DATEDIFF Syntax Error

Verfasst: Mo, 05.01.2015 22:42
von sheepfriend
Und an dem CURRENT_TIME liegt es nicht

Re: DATEDIFF Syntax Error

Verfasst: Di, 06.01.2015 11:15
von RobertG
Hallo sheepfriend,

an CURRENT_TIME habe ich auch zuerst gedacht. Von der Logik her wäre dort nur die aktuelle Uhrzeit zu erwarten, beim CURRENT_TIMESTAMP Datum und Uhrzeit und bei CURRENT_DATE das Datum. Ich habe das kurz getestet und bei der HSQLDB festgestellt, dass mit CURRENT_TIME entgegen der eigentlichen Definition wohl auch das Datum irgendwie mitgeliefert wird. Vielleicht wird einfach beim Datum die Tageszeit auf 0 Uhr gesetzt.

Nun aber zu der Abfrage:

Code: Alles auswählen

SELECT "Finanzdaten"."Kreditnummer", "Finanzdaten"."eingegangene Raten", "Finanzdaten"."Eingangsdatum", "Kundendaten"."Vorname", "Kundendaten"."Nachname", "Kundendaten"."Wohnort", "Kundendaten"."Straße, Nr " FROM "Finanzdaten", "Kundendaten", "Kontodaten" WHERE "Finanzdaten"."Kundennummer" = "Kundendaten"."Kundennr." AND "Kontodaten"."Kreditnummer" = "Finanzdaten"."Kreditnummer" 
Nicht alles, was ein Assistent zusammen bastelt, muss definitiv richtig sein. Das obere ist es aber, weil da Felder dreier Tabellen vorkommen, die auch in der Tabellenliste stehen und deren Beziehung anschließend zueinander definiert wird.

Code: Alles auswählen

SELECT "Finanzdaten"."Eingangsdatum" FROM "Finanzdaten" WHERE DATEDIFF( 'dd', CURRENT_TIME, "Finanzdaten"."Eingangsdatum")>31
Das hier ist ebenfalls eine komplette Abfrage, die allerdings nur eine Spalte mit Datumswerten liefert.
Das AND, das beide Abfragen verbindet, ist falsch.

Du möchtest die obere Abfrage mit dem DATEDIFF gefiltert haben?

Code: Alles auswählen

SELECT "Finanzdaten"."Kreditnummer", "Finanzdaten"."eingegangene Raten", "Finanzdaten"."Eingangsdatum", "Kundendaten"."Vorname", "Kundendaten"."Nachname", "Kundendaten"."Wohnort", "Kundendaten"."Straße, Nr " FROM "Finanzdaten", "Kundendaten", "Kontodaten" WHERE "Finanzdaten"."Kundennummer" = "Kundendaten"."Kundennr." AND "Kontodaten"."Kreditnummer" = "Finanzdaten"."Kreditnummer" AND DATEDIFF( 'dd', CURRENT_TIME, "Finanzdaten"."Eingangsdatum")>31 
So hast Du

Code: Alles auswählen

SELECT ...darzustellende Felder... FROM ...betroffene Tabellen... WHERE ...alle Bedingungen...
Und keine zusätzlichen SELECT-Befehl, der mitten in den Bedingungen neue Felder produzieren soll.

Gruß

Robert

Re: DATEDIFF Syntax Error

Verfasst: Di, 06.01.2015 18:06
von sheepfriend
Doch so ein einfacher Fehler.. Danke sehr, es funktioniert, nur habe ich jetzt das Problem, dass er wenn die Frist also 31 Tage noch nicht abgelaufen sind alle anzeigt, bei der Abfrage ob die Frist allerdings schon über ist, zeigt er dann eben keinen an, obwohl es einige Dati gibt, die schon über 31 Tagen her sind

Re: DATEDIFF Syntax Error

Verfasst: Di, 06.01.2015 18:26
von RobertG
Hallo sheepfriend,

versuche einmal folgende Abfrage. Dann siehst Du den Fehler, der sicher immer wieder vorkommen kann: immer überprüfen, was eine Funktion für einen Wert heraus gibt.

Code: Alles auswählen

SELECT "Finanzdaten"."Eingangsdatum", DATEDIFF( 'dd', CURRENT_TIME, "Finanzdaten"."Eingangsdatum") AS "dd" FROM "Finanzdaten" 
Gruß

Robert

Re: DATEDIFF Syntax Error

Verfasst: Di, 06.01.2015 19:11
von sheepfriend
vielen Dank für diesen Tipp, jetzt funktioniert alles