Seite 1 von 1
Die Dateninhalte konnten nicht geladen werden
Verfasst: Mi 8. Jan 2020, 15:33
von debrequ
firebird_sdbc error:
*Dynamic SQL Error
*SQL error code = -104
*Token unknown - line 1, column 118
*YEAR
caused by
'isc_dsql_prepare'
Diese Fehlermeldung erhielt ich nach dem Aufruf dieser Abfrage:
SELECT "ID", "Mitgliedsnummer", "Geschl", "Name", "VName", "ZWort", "Straße", "PLZ", "Ort", "GebDatum", "Austritt", YEAR( "GebDatum" ) AS "GebJahr", MONTH( "GebDatum" ) AS "GebMonat", DAY( "GebDatum" ) AS "GebTag", YEAR( NOW( ) ) - YEAR( "GebDatum" ) AS "Alter" FROM "Mitglieder" WHERE ( "Austritt" IS NULL OR "Austritt" = YEAR( NOW( ) ) || '-12-31' ) AND MOD( ( YEAR( NOW( ) ) - YEAR( "GebDatum" ) ), 10 ) = 0 ORDER BY ( YEAR( NOW( ) ) - YEAR( "GebDatum" ) ) ASC
Mit dieser Abfrage möchte ich die Mitglieder, die dieses Jahr einen runden Geburtstag feiern, herausfiltern.
Was ist an der Abfrage falsch? 2019 lief sie noch.
Re: Die Dateninhalte konnten nicht geladen werden
Verfasst: Mi 8. Jan 2020, 16:53
von RobertG
Hallo debrequ,
wenn die Abfrage 2019 noch lief, dann hast Du zu der Zeit noch die HSQLDB genutzt. Die Fehlermeldung kommt von Firebird, das den Begriff YEAR (und danach auch MONTH und DAY und NOW() und ???) nicht kennt.
Eine Ersetzungstabelle findest Du hier:
https://www.familiegrosskopf.de/robert/ ... _migration
YEAR(date) wird zu EXTRACT(YEAR FROM datetime) - wobei datetime eben heoißt, dass das auch ein Datums- und Zeitangabe (Timestamp) sein kann. Schreibe also EXTRACT(YEAR FROM "GebDatum"). Entsprechend weiter mit MONTH und DAY. Und NOW() ersetzt Du durch CURRENT_TIMESTAMP.
Gruß
Robert
Re: Die Dateninhalte konnten nicht geladen werden
Verfasst: Mi 8. Jan 2020, 17:52
von debrequ
Hallo Robert,
zunächst herzlichen Dank für Deine Hilfe.
ich habe geglaubt alles nach Deiner Anweisung gemacht zu haben, aber es funktioniert noch nicht. Jetzt habe ich diese Meldung bekommen:
SQL-Status: HY000
Fehlercode: 1000
Syntaxfehler im SQL-Ausdruck
Die SQL-Anweisung sieht jetzt so aus:
SELECT "ID", "Mitgliedsnummer", "Geschl", "Name", "VName", "ZWort", "Straße", "PLZ", "Ort", "GebDatum", "Austritt", EXTRACT(YEAR FROM „GebDatum“) AS "GebJahr", EXTRACT(MONTH FROM „GebDatum“) AS "GebMonat", EXTRACT(DAY FROM „GebDatum“) AS "GebTag", YEAR(CURRENT_TIMESTAMP) - YEAR( "GebDatum" ) AS "Alter" FROM "Mitglieder" WHERE ( "Austritt" IS NULL OR "Austritt" = YEAR CURRENT_TIMESTAMP || '-12-31' ) AND MOD( ( YEAR(CURRENT_TIMESTAMP) - YEAR( "GebDatum" ) ), 10 ) = 0 ORDER BY ( YEAR(CURRENT_TIMESTAMP) - YEAR( "GebDatum" ) ) ASC
Was habe ich falsch gemacht?
Geh bitte davon aus, dass ich keine Ahnung habe. Die SQL-Anweisung habe ich mal mit Eurer Hilfe zusammen gebastelt.
Re: Die Dateninhalte konnten nicht geladen werden
Verfasst: Mi 8. Jan 2020, 20:40
von RobertG
Hallo debrequ,
stimmt der Code, den Du da postest? Da sind doppelte Anführungszeichen unten drin.
YEAR(CURRENT_TIMESTAMP) - YEAR( "GebDatum" )
darf natürlich auch nicht sein. Und das Ganze steht dort noch mehrere male in etwas abgewandelter Form.
EXTRACT(YEAR FROM CURRENT_TIMESTAMP) ...
Die Funktionen YEAR, DAY oder MONTH sind Firebird unbekannt.
Gruß
Robert
Re: Die Dateninhalte konnten nicht geladen werden
Verfasst: Fr 10. Jan 2020, 18:54
von debrequ
Hallo Robert,
ich war durch eine Erkältung 3 Tage außer Gefecht, deshalb heute erst meine Reaktion.
RobertG hat geschrieben: ↑Mi 8. Jan 2020, 20:40
stimmt der Code, den Du da postest?
Nein, sonst würde die Abfrage ja laufen.
Ich glaube ich portiere die Datensätze in eine Calc-Tabelle und filtere mir dann die gewünschten raus.
Die SQL Anweisung ist mir zu kompliziert.
Danke für Deine Hilfe
Re: Die Dateninhalte konnten nicht geladen werden
Verfasst: Fr 10. Jan 2020, 19:26
von RobertG
Code: Alles auswählen
SELECT "ID", "Mitgliedsnummer", "Geschl", "Name", "VName", "ZWort", "Straße", "PLZ", "Ort", "GebDatum", "Austritt",
EXTRACT(YEAR FROM "GebDatum") AS "GebJahr",
EXTRACT(MONTH FROM "GebDatum") AS "GebMonat",
EXTRACT(DAY FROM "GebDatum") AS "GebTag",
EXTRACT(YEAR FROM CURRENT_TIMESTAMP) - EXTRACT(YEAR FROM "GebDatum" ) AS "Alter"
FROM "Mitglieder" WHERE
( "Austritt" IS NULL OR "Austritt" = EXTRACT(YEAR FROM CURRENT_TIMESTAMP) || '-12-31' )
AND MOD( ( EXTRACT(YEAR FROM CURRENT_TIMESTAMP) - EXTRACT(YEAR FROM "GebDatum" ) ), 10 ) = 0
ORDER BY ( EXTRACT(YEAR FROM CURRENT_TIMESTAMP) - EXTRACT(YEAR FROM "GebDatum" ) ) ASC
Grundsätzlich: Wenn von einer Datenbankengine zu einer anderen gewechselt wird kommen immer wieder Abfragen vor, die angepasst werden müssen. Die obige dürfte jetzt (vermutlich) auch unter Firebird laufen.
Gruß
Robert
Re: Die Dateninhalte konnten nicht geladen werden
Verfasst: So 12. Jan 2020, 16:00
von debrequ
Hallo Robert,
vielen Dank für Deine Unterstützung, die Abfrage läuft voll umfänglich.