Parameterabfrage mit Ähnlichkeiten

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Parameterabfrage mit Ähnlichkeiten

Re: Parameterabfrage mit Ähnlichkeiten

von DPunch » Do, 22.07.2010 14:48

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.

Re: Parameterabfrage mit Ähnlichkeiten

von sicgoe » Do, 22.07.2010 08:56

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

von DPunch » Mi, 21.07.2010 16:48

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

von sicgoe » Mi, 21.07.2010 13:57

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

von komma4 » Mi, 21.07.2010 12:37

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

von sicgoe » Mi, 21.07.2010 11:12

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

von pmoegenb » Mi, 21.07.2010 10:46

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

von sicgoe » Mi, 21.07.2010 09:09

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

von komma4 » Sa, 17.07.2010 05:30

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

Re: Parameterabfrage mit Ähnlichkeiten

von Barlee » Sa, 17.07.2010 02:52

Hallo,

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

Gruß Barlee

Parameterabfrage mit Ähnlichkeiten

von sicgoe » Fr, 16.07.2010 14:16

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 -

Nach oben