Parameterabfrage mit Ähnlichkeiten

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

sicgoe
*
Beiträge: 16
Registriert: Mi, 18.10.2006 08:29
Wohnort: Goettingen, Planet Earth
Kontaktdaten:

Parameterabfrage mit Ähnlichkeiten

Beitrag von sicgoe »

Hallo,
hab hier eine Datenbankabfrage erstellt, bei der als Kriterium ":Feldname" angegeben ist. Die Abfrage führt aber nur zu Treffern wenn ich genau den richtigen Begriff eingebe. Ich möchte aber auch Treffer wenn ich einen unvollständigen Suchbegriff eingebe, also z:b. bei Eingabe von "Micro" sollte genauso "Microsoft" wie "Microphon" gefunden werden.
Leider wird mir aus der Onlinehilfe die Syntax für Kriterium nicht ganz klar. Ich habe WIE '*:Feldname*' benutzt, aber dann wird für den Feldname gar kein Eingabefeld mehr angezeigt.

Kann mir da jemand schnell auf die Sprünge helfen, was die korrekte Syntax wäre?

Danke schonmal!

- Ulli -
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von Barlee »

Hallo,

wenn Du mit WIE bzw. LIKE arbeitest, dann musst Du als Platzhalter % verwenden.
Für Dein Beispiel also "Micro%"

Gruß Barlee
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von komma4 »

F1 Onlinehilfe OpenOffice.org Base, Abfrageentwurf hat geschrieben:Parameterabfragen mit Platzhaltern (*, _) oder Sonderzeichen (z. B. ?) sind nicht möglich.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
sicgoe
*
Beiträge: 16
Registriert: Mi, 18.10.2006 08:29
Wohnort: Goettingen, Planet Earth
Kontaktdaten:

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von sicgoe »

Hi,
komma4 hat geschrieben:
F1 Onlinehilfe OpenOffice.org Base, Abfrageentwurf hat geschrieben:Parameterabfragen mit Platzhaltern (*, _) oder Sonderzeichen (z. B. ?) sind nicht möglich.
Ja, hab ich auch gesehen, konnte ich nur einfach nicht glauben.... :o So eine Möglichkeit hatte ich eigentlich als selbstverständlich angesehen :shock:

Na, vielleicht findet sich ja doch noch ein Workaround, danke jedenfalls!

- Ulli -
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von pmoegenb »

sicgoe hat geschrieben:Ja, hab ich auch gesehen, konnte ich nur einfach nicht glauben.... :o So eine Möglichkeit hatte ich eigentlich als selbstverständlich angesehen :shock:
Na, vielleicht findet sich ja doch noch ein Workaround, danke jedenfalls!
Structured Query Language (SQL) ist eine von ANSI und ISO standardisierte Datenbankabfragesprache und da gibst nun mal nur das Prozentzeichen als Platzhalter.
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
sicgoe
*
Beiträge: 16
Registriert: Mi, 18.10.2006 08:29
Wohnort: Goettingen, Planet Earth
Kontaktdaten:

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von sicgoe »

pmoegenb hat geschrieben: Structured Query Language (SQL) ist eine von ANSI und ISO standardisierte Datenbankabfragesprache und da gibst nun mal nur das Prozentzeichen als Platzhalter.
Ist mir schon klar :wink:
Die Onlinehilfe ist da auch uneindeutig/wortkarg. Die Abfrage sollte in SQL lauten: SELECT "Feld" AS "Feld" FROM "Tabelle" WHERE ( "Feld" LIKE '%:Feld%') - übersetzt OOB im Kriterium-Feld des Abfrageentwurfs als WIE '*:Feld*'. Also Base macht aus den Prozentzeichen von SQL, ein Sternzeichen.
Wie auch immer, der gewünschte Effekt - Suche nach allen Feldern in denen die Eingabe enthalten ist (nicht exakte Übereinstimmung) - ist offensichtlich nicht möglich. Stattdessen benutze ich jetzt erstmal die Anweisung SELECT "Feld" AS "Feld" FROM "Tabelle" WHERE ( "Feld" LIKE :Feld) (oder im Abfrageentwurf - Kriterium WIE :Feld), was zur Folge hat, dass die unscharfe Suche zumindest funktioniert, indem man bei der Variablen-Eingabe ein Prozentzeichen mit eingibt. Im o.g. Beispiel "Micro%". Ist zwar unschön, funktioniert aber zumindest... :wink:

- Ulli -
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von komma4 »

Die Interpretation, dass * und _ nicht erlaubt sind (wohl aber das %) brachte mich dazu das Thema erneut zu untersuchen.


Fazit: es geht, wenn in der Eingabe der Parameterabfrage ein % mit eingegeben wird.

Funktionierendes Beispiel (OOo 3.0.1/PostgreSQL-Datenbank 8.11.3/JDBC-Treiber 8.4-701.jdbc4)

Code: Alles auswählen

SELECT "id" AS "id", "name" AS "name", "description" AS "description" FROM "public"."t301_greek_name" AS "t301_greek_name" WHERE "name" LIKE :Name
Im Parameter-Abfragefenster habe ich dann ap% eingegeben, um den Datensatz des Apollon (description:
Sohn des Zeus und der Leto, Zwillingsbruder der Artemis. Gott des Lichtes (Helios - Sonne) und des Frühlings, der sittlichen Ordnung/Reinheit und Gesetzmäßigkeit, der Weissagung und der Musik, des Gesanges und der Dichtung, Helfer im Krieg, Beschützer der Herden)
zu sehen.



Cool, Danke für's Nachhaken! [mache meine Abfragen sonst über BASIC 8)]
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
sicgoe
*
Beiträge: 16
Registriert: Mi, 18.10.2006 08:29
Wohnort: Goettingen, Planet Earth
Kontaktdaten:

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von sicgoe »

komma4 hat geschrieben:Die Interpretation, dass * und _ nicht erlaubt sind (wohl aber das %) brachte mich dazu das Thema erneut zu untersuchen.
Das blöde ist halt, das * und % für OOoBase im Prinzip das gleiche sind, % in der SQL-Schreibweise, * in der OOo-Schreibweise
komma4 hat geschrieben: Fazit: es geht, wenn in der Eingabe der Parameterabfrage ein % mit eingegeben wird.
Ist in meinen Augen bloss halt etwas unelegant, wenn bei der EIngabe noch Anweisungen (Jokerzeichen) miteingegeben werden müssen. Schöner wäre es, wenn in der Abfrage die Unschärfe mit implementiert werden könnte. Aber das Leben ist halt kein Ponyschlecken :D

- Ulli -
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von DPunch »

Aloha
sicgoe hat geschrieben:
komma4 hat geschrieben: Fazit: es geht, wenn in der Eingabe der Parameterabfrage ein % mit eingegeben wird.
Ist in meinen Augen bloss halt etwas unelegant, wenn bei der EIngabe noch Anweisungen (Jokerzeichen) miteingegeben werden müssen. Schöner wäre es, wenn in der Abfrage die Unschärfe mit implementiert werden könnte. Aber das Leben ist halt kein Ponyschlecken :D
Wieso nicht einfach so:

Code: Alles auswählen

SELECT "Feld" AS "Feld" FROM "Tabelle" WHERE LOWER("Feld") LIKE LOWER('%' || :Feld || '%')
sicgoe
*
Beiträge: 16
Registriert: Mi, 18.10.2006 08:29
Wohnort: Goettingen, Planet Earth
Kontaktdaten:

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von sicgoe »

DPunch hat geschrieben: Wieso nicht einfach so:

Code: Alles auswählen

SELECT "Feld" AS "Feld" FROM "Tabelle" WHERE LOWER("Feld") LIKE LOWER('%' || :Feld || '%')
Ah, gute Idee :) Aber: "Die Abfrage kann nicht ausgeführt werden. 'WIE' kann nur mit einem Zeichenfolgen-Argument benutzt werden", das gleiche auch mit CONCAT statt ||. Funzt leider auch nicht, tja...

LOWER ist übrigens gar nicht nötig, zwischen Gross-/Kleinschreibung unterscheidet OOoBase anscheinend ohnehin nicht...

Aber vielen Dank für's mitgrübeln :)

- Ulli -
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Parameterabfrage mit Ähnlichkeiten

Beitrag von DPunch »

Aloha

Ich hab das gerade eben mal ausprobiert und bei mir klappt es einwandfrei (Win XP / OOo 3.11 / Eingebettete HSQL-DB).
Keine Ahnung, ob das Versionsspezifisch ist, aber LIKE-Abfragen sind bei mir übrigens Case-Sensitive.
Antworten