Seite 1 von 1

Parameterabfrage mit Ähnlichkeiten

Verfasst: Fr, 16.07.2010 14:16
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 -

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Sa, 17.07.2010 02:52
von Barlee
Hallo,

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

Gruß Barlee

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Sa, 17.07.2010 05:30
von komma4
F1 Onlinehilfe OpenOffice.org Base, Abfrageentwurf hat geschrieben:Parameterabfragen mit Platzhaltern (*, _) oder Sonderzeichen (z. B. ?) sind nicht möglich.

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Mi, 21.07.2010 09:09
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 -

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Mi, 21.07.2010 10:46
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.

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Mi, 21.07.2010 11:12
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 -

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Mi, 21.07.2010 12:37
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)]

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Mi, 21.07.2010 13:57
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 -

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Mi, 21.07.2010 16:48
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 || '%')

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Do, 22.07.2010 08:56
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 -

Re: Parameterabfrage mit Ähnlichkeiten

Verfasst: Do, 22.07.2010 14:48
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.