SQL Parametereingabe und damit rechnen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Benutzeravatar
stegerpl
Beiträge: 3
Registriert: Mo, 13.03.2017 17:17

SQL Parametereingabe und damit rechnen

Beitrag von stegerpl »

Hallo,
bei der Erstellung meiner Mitgliederdatenbank bin ich auf ein Problem gestoßen, für welches ich (noch) keine Lösung gefunden habe. Es geht um Berechnungen in einer SQL-Abfrage samt Parametereingabe.
Konkret: die Mitglieder sollen zu runden Geburtstagen oder bei runden Jahrestagen ihrer Mitgliedschaft ein entsprechendes Schreiben bekommen. Dazu habe ich die Felder "Geburtstag" und "Eintritt" mit denen ich arbeiten kann. Mittels einer Parameterabfrage hole ich mir das Jahr für welches die Berechnung gelten soll (damit man für ein beliebiges Jahr im Voraus sehen kann wer denn aller zu beglückwünschen ist).
Die einzelnen Abfragen funktionieren schon ganz gut so nach dem Muster:

Code: Alles auswählen

SELECT "Vorname", "Name", "Geburtstag", :Jahr - YEAR( "Mitglieder-Adressen"."Geburtstag" ) "Jubilaeum" FROM "Mitglieder-Adressen" WHERE MOD( "Jubilaeum", 5 ) = 0 AND "Jubilaeum" >= 70 
Was ich noch nicht geschafft habe ist eine Abfrage in welcher beide Anlässe vorkommen können - weil ich dafür den abgefragten Parameter "Jahr" quasi zwischenspeichern müsste und genau das weiß ich nicht wie und ob es überhaupt geht.
Folgendes geht jedenfalls nicht:

Code: Alles auswählen

SELECT "Vorname", "Name", "Geburtstag", :Jahr as "Zeitpunkt", "Geburtstag" FROM "Mitglieder-Adressen" WHERE MOD( "Zeitpunkt" - "Geburtstag", 5 ) = 0
...liefert (nach der Parametereingabe)...

Code: Alles auswählen

Die Dateninhalte konnten nicht geladen werden.
SQL-Status: 37000     Fehler-Code: -16
Wrong data type: java.lang.IllegalArgumentException
Wer kann mir hier helfen?
Danke!
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL Parametereingabe und damit rechnen

Beitrag von RobertG »

Hallo stegerpl,

Code: Alles auswählen

SELECT "Vorname", "Name", "Geburtstag", :Jahr as "Zeitpunkt", "Geburtstag" 
FROM "Mitglieder-Adressen" 
WHERE MOD( "Zeitpunkt" - "Geburtstag", 5 ) = 0
Folgende Sachen fallen mir auf:
Geburtstag wird vermutlich ein Datum sein. Das Feld taucht doppelt in der Abfrage auf.
Das Feld "Zeitpunkt" gibt es für die Bedingung nicht. Hier müsste :Jahr stehen.
Du versuchst ein Datum von einem Jahr abzuziehen? Klappt mit der internen HSQLDB nicht. Die Firebird-Datenbank, die der neuesten LO-Version beiliegt (experimentell!), kennt Funktionen wie Dateadd und eben auch die Differenz zwischen Datumswerten. Aber auch da geht keine Differenz zwischen Jahr und Datum.

Du musst ein bisschen genauer werden, welchen Datentyp denn die verschiedenen Felder haben. Vielleicht meinst Du ja auch YEAR("Geburtstag") ...

Code: Alles auswählen

SELECT "Vorname", "Name", "Geburtstag", :Jahr as "Zeitpunkt"
FROM "Mitglieder-Adressen" 
WHERE MOD( :Jahr - YEAR("Geburtstag"), 5 ) = 0
... könnte vielleicht das Passende für Dich sein.

Gruß

Robert
Antworten