Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Teilstringsuche in Datenbanken

63 views
Skip to first unread message

Andre Rajkovic

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to
Hallo,

welche Möglichkeit gibt es eine Teilstringsuche in einer Datenbank
durchzuführen ?
Also z.B.

Eingabe: er -> Result: ERwin, MeiER, HintERhuber, ...

Mit einem Filter geht das ja nicht, mit Lookup, Locate auch nicht ... Wie
denn dann, oder muß
ich wirklich alle Datensätze durchlaufen und einen Pos() Stringvergleich
machen ???
Oder vielleicht per SQL-Query ?

Ciao, Andre.


Thomas Gehrke

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to

Andre Rajkovic <in...@cystem.com> schrieb in im Newsbeitrag:
808om3$d88$1...@news05.btx.dtag.de...

Geht mit SQL im WHERE-Abschnitt:
<Field> [not] LIKE <Ausdruck>,
wobei '%' Platzhalter für beliebig viele Zeichen (auch gar keins) und '_'
Platzhalter für genau ein Zeichen ist.

Das einzige Problem ist, daß LIKE casesensitiv ist (also auf
Groß-,Kleinschreibung achtet).
Wenn du also wirklich alle Einträge haben willst, wo die gesuchte
Kombination auftaucht, egal, ob groß oder klein geschrieben, wird dir nicht
viel anderes übrig bleiben, als von Hand durchzugehen.

Thomas

Heiko Degenhardt

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to
in...@cystem.com (Andre Rajkovic) wrote in
de.comp.lang.delphi.datenbanken:

>Hallo,
Hallo Andre!

>
>welche Möglichkeit gibt es eine Teilstringsuche in einer Datenbank
>durchzuführen ?

War da nicht grad gestern hier irgendwas...?

>...


>Oder vielleicht per SQL-Query ?

Ja, und mit "like", imho.

Rgds.
Heiko.

Ken Peg

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to
Hi

>Mit einem Filter geht das ja nicht, mit Lookup, Locate auch nicht ... Wie
>denn dann, oder muß
>ich wirklich alle Datensätze durchlaufen und einen Pos() Stringvergleich
>machen ???


Teilstrings kann man doch mit einem Filter heraussortieren.

Die folgenden string vars:
fieldval = Fieldname
filterval = Teilstring

procedure TForm1.MeineTabelleFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
accept:=false;
if pos(UPPERCASE(filterval),UPPERCASE(DataSet[filterval] ))<>0 then
accept:=true;
end;

Es waere noch angebracht auf null Werte von filterval +fieldval zu pruefen.

mfg
ken

Heiko Czeczior

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to

Andre Rajkovic schrieb in Nachricht
<808om3$d88$1...@news05.btx.dtag.de>...

>Oder vielleicht per SQL-Query ?
>
SELECT ..... WHERE Feld LIKE '%ausdruck%'

Funktioniert zumindest Lokal

Andre Rajkovic

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to
Hallo,

> War da nicht grad gestern hier irgendwas...?

Ja aber mit nem tollen Subject ...

Habs jetzt bei GENAUEREM hinsehen auch gefunden. :)

Ca, Andre.


Andre Rajkovic

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to
Hallo,

> procedure TForm1.MeineTabelleFilterRecord(DataSet: TDataSet;
> var Accept: Boolean);
> begin
> accept:=false;
> if pos(UPPERCASE(filterval),UPPERCASE(DataSet[filterval] ))<>0 then
> accept:=true;
> end;
>
> Es waere noch angebracht auf null Werte von filterval +fieldval zu
pruefen.

Ahh, das ist ja nicht schlecht ... DANKE ! :)) (Hätt ich ja auch selber
drauf kommen können!) ;)

Ca, Andre.


Ulrik Hoffmann

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to
Hallo,

probier mal

select * from tabelle where upper(feld) like '%ER%'.

Das Upper müßtest Du in die jeweilige Syntax der DB übersetzen,
z.B. Uppercase, etc....

Access und einige andere DB's nehmen ein * anstelle des % als
Wildcard.

Denke daran, dass mit upper(feld) kein Index benutzt werden kann,
es sei denn Du benutzt Oracle8i oder den SQL-Server 7, die
können das wohl. Also könnte u.U. die Abfrage etwas länger
dauern, dürfte aber schneller sein, als eine Abfrage mit pos().

Viele Grüße
Uli

> welche Möglichkeit gibt es eine Teilstringsuche in einer Datenbank
> durchzuführen ?

Ulrik Hoffmann

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to
> Hallo,
>
> probier mal
>
> select * from tabelle where upper(feld) like '%ER%'.
>
> Das Upper müßtest Du in die jeweilige Syntax der DB übersetzen,
> z.B. Uppercase, etc....
>
> Access und einige andere DB's nehmen ein * anstelle des % als
> Wildcard.
>
> Denke daran, dass mit upper(feld) kein Index benutzt werden kann,
> es sei denn Du benutzt Oracle8i oder den SQL-Server 7, die
> können das wohl. Also könnte u.U. die Abfrage etwas länger
> dauern, dürfte aber schneller sein, als eine Abfrage mit pos().
>

der letzte Absatz war Schwachsinn, denn mit '%ER%' kannst Du
sowieso keinen Index benutzen (höchstens mit 'ER%') :-).


Heiko Degenhardt

unread,
Nov 9, 1999, 3:00:00 AM11/9/99
to
in...@cystem.com (Andre Rajkovic) wrote in
de.comp.lang.delphi.datenbanken:

>Hallo,


>
>> War da nicht grad gestern hier irgendwas...?
>
> Ja aber mit nem tollen Subject ...

Ich war's nich! ;-)

Heiko.

Jörg Gehlmann

unread,
Nov 14, 1999, 3:00:00 AM11/14/99
to

Heiko Degenhardt <heiko.de...@sentec-elektronik.de> schrieb in im
Newsbeitrag:

> Ich war's nich! ;-)


Aber ich, sorry und einen Haufen Asche auf mein Haupt... ;-)

Jörg


0 new messages