Stringvergleich

Hallo,

ich arbeite mit Oracle und möchte folgendes machen:

select NAME from TEST_TABLE where NAME=‚Schmid‘

aber, ich möchte, dass er auch anders geschriebene „Schmid“ erkennt (SCHMID, …) oder auch TeilStrings erkennt (SCHIDHUBER)
Gibt es da unter Oracle Befehle oder muss ich das in meiner Application überprüfen …

Danke

Hi,

select NAME from TEST_TABLE where NAME=‚Schmid‘

aber, ich möchte, dass er auch anders geschriebene „Schmid“
erkennt (SCHMID, …) oder auch TeilStrings erkennt
(SCHIDHUBER)

Dazu gibt es eine eingebaute Funktion: Soundex. Diese errechnet aus einer Zeichnekette einen 4stelligen Code, der für sich alleine keinen besonderen Wert hat, aber die Eigenschaft aufweist, für ähnliche Zeichenketten ähnliche Werte zu liefern. Ein Beispiel:

SQL\> select soundex('Schmid') from dual;

SOUN
----
S530

SQL\> select soundex('SCHMID') from dual;

SOUN
----
S530

SQL\> select soundex('SCHMIDBAUER') from dual;

SOUN
----
S531

SQL\> select soundex('SCHMIDHUBER') from dual;

SOUN
----
S531

Wie du unschwer erkennen kannst, ist sie „eingeschränkt brauchbar“. Für Groß-und Kleinschreibung ist sie gut, aber für andere Vergleiche, insbesondere bei längeren Worten, ist sie kaum zu gebrauchen. Zwei Beispiele:

SQL\> select soundex('ich finde, Soundex ist genial') from dual;

SOUN
----
I215

SQL\> select soundex('ich finde, Soundex ist das dämlichste, was es gibt') from dual;

SOUN
----
I215

Hier erkennt man, daß völlig unterschiedliche Zeichenketten gleiche Werte liefern können.

SQL\> select soundex('Lahmeyer') from dual;

SOUN
----
L560

SQL\> select soundex('Dietmeyer') from dual;

SOUN
----
D356

Hier erkennt man, daß Zeichenketten, die vom Menschen als ähnlich empfunden werden, völlig unterschiedliche Werte liefern können.

Du mußt genauer wissen, was du als „ähnlich“ definierst. Dann läßt sich das auch mit anderen Mitteln herausfiltern.

Beispieslweise könnte man mit einem ähnlichen Ausdruck Erfolg haben:

SELECT Name, Vorname
 FROM Adressen
 WHERE UPPER(Name) LIKE UPPER ('Schmid%');

Gruß

J.

Hallo,

ich arbeite mit Oracle und möchte folgendes machen:

select NAME from TEST_TABLE where NAME=‚Schmid‘

aber, ich möchte, dass er auch anders geschriebene „Schmid“
erkennt (SCHMID, …) oder auch TeilStrings erkennt
(SCHIDHUBER)
Gibt es da unter Oracle Befehle oder muss ich das in meiner
Application überprüfen …

Eine phonetische Suche (suche nach ähnlich geschriebenen aber gleich ausgesprochenen Wörtern) ist mit SQL nicht zu machen und auch Oracle kann das soweit ich weiß nicht.

Du kannst vermutlich nur vorher alle möglichen Schreibweisen in deiner Application ermitteln und dann mit

WHERE
 NAME IN ('Schmidt', 'Schmid', u.s.w.)

abfragen.

Gruß,
Darkwing ^v^

select NAME from TEST_TABLE where NAME=‚Schmid‘

Für andere Schreibweisen: SOUNDEX

Für Teilwörter und Groß-/Kleinschreibung:

select NAME from TEST_TABLE where upper(NAME) like ‚%SCHMID%‘;

Du mußt nur von deinem Programm aus die Eingabe groß machen und die Prozente drumsetzen…