SQL Abfrage mit Parameter Problem

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

rammy
Beiträge: 4
Registriert: Fr, 28.08.2020 14:32

SQL Abfrage mit Parameter Problem

Beitrag von rammy »

Hallo Leute,

ich möchte eine Filter-Abrage erstellen und habe ein kleines Problem mit dem SQL Code

[bb]
WHERE ( LOWER ( "Vorname" ) LIKE ( :qVorname || ' % ') OR :qVorname IS NULL )
[/bb]

das filtern sollte möglichst nach Buchstaben möglich sein. Wenn ich || ' % ' entferne funktioniert die Abrage. Ich benutze MariaDB als Datenbank allerdings klappt es auch nicht mit der Base Datenbank. Was mache ich falsch?

Gruss
rammy
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL Abfrage mit Parameter Problem

Beitrag von RobertG »

Hallo rammy,

MySQL und MariaDB kennen die Art der Verbindung nicht, die Du nutzt.

Code: Alles auswählen

WHERE ( LOWER ( "Vorname" ) LIKE CONCAT( :qVorname, ' % ') OR :qVorname IS NULL )
müsste dort funktionieren.
Das setzt natürlich voraus, dass Du die Anfangsbuchstaben beim Suchen immer klein eingibst.

Gruß

Robert
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL Abfrage mit Parameter Problem

Beitrag von RobertG »

Wenn das nicht funktioniert, dann liegt es am Treiber und an der Parameterabfrage.

Ich habe das gerade mit einer MariaDB probiert:
Direkter Treiber von LibreOffice funktioniert zusammen mit dem Parameter nicht. Wenn ich aber einen festen Anfangsbuchstaben statt des Parameters da rein schreibe und außerdem natürlich die überflüssigen Leerzeichen um das Prozentzeichen herum raus nehme, dann funktioniert die Abfrage. Die überflüssigen Leerzeichen hatten sich Du eine Kopie der Abfrage im Ursprungspost ergeben:

Code: Alles auswählen

... WHERE ( LOWER ( "Vorname" ) LIKE CONCAT( 'r', '%'))
Sobald ich da einen Parameter einsetze ist es vorbei. Und das liegt daran, dass LibreOffice noch den Eintrag

Code: Alles auswählen

db:parameter-name-substitution="false"
in der content.xml hat. Nachdem ich den gelöscht habe tat es auch diese Abfrage.

Da der Kontakt zur MariaDB/MySQL aber sowieso über JDBC besser klappt habe ich auch das getestet:

Code: Alles auswählen

... WHERE LOWER ( `Vorname` ) LIKE CONCAT( :qVorname, '%' )
und das funktioniert dann dort. Ebenso wie

Code: Alles auswählen

... WHERE (LOWER ( `Vorname` ) LIKE CONCAT( :qVorname, '%' ) OR :qVorname IS NULL)
Ich würde also an Deiner Stelle hier einmal posten, mit welcher Kombination Du das Ganze denn im Moment versuchst.
rammy
Beiträge: 4
Registriert: Fr, 28.08.2020 14:32

Re: SQL Abfrage mit Parameter Problem

Beitrag von rammy »

Hallo Robert,

keiner der Abfragen hat bei der direkten Verbindung zur Datenbank funktioniert. Also habe ich die Verbindung auf JDBC umgestellt und siehe da viel weniger Probleme.

Bei Deiner Abfrage :

Code: Alles auswählen

WHERE (LOWER ( `Vorname` ) LIKE CONCAT( :qVorname, '%' ) OR :qVorname IS NULL)
wurde nur das erste Zeichen vom String berücksichtigt. Also habe ich es etwas angepasst:

Code: Alles auswählen

WHERE ( LOWER ( "Nachname" ) LIKE CONCAT(  '%', :qNachname, '%' ) OR :qNachname IS NULL ) AND ( LOWER ( "Vorname" ) LIKE CONCAT( '%', :qVorname, '%' ) OR :qVorname IS NULL )
so wird jedes Zeichen im String auf die Eingabe hin geprüft. Wobei es egal ist ob man Klein oder Groß schreibt...zumindest auf meinem System.

Vielen Dank Robert für Deine Hilfe.

Gruß rammy
Antworten