- Kategorien:
SOUNDEX¶
Gibt eine Zeichenfolge zurück, die eine phonetische Darstellung der Eingabezeichenfolge enthält.
Mit dieser Funktion können Sie feststellen, ob zwei Zeichenfolgen (z. B. die Familiennamen Levine
und Lavine
, die Wörter to
und too
usw.) in der englischen Sprache ähnlich ausgesprochen werden.
Diese Funktion verwendet den phonetischen Algorithmus Soundex, der in Soundex System beschrieben ist. Beachten Sie jedoch, dass Snowflake keine spezielle Verarbeitung von Nachname-Präfixen (z. B. „Van“, „De“, „La“ usw.) bietet.
SOUNDEX('Pfister')
gibt P236
zurück. Da die ersten beiden Buchstaben (P
und f
) nebeneinander liegen und die gleiche Soundex-Codenummer (1
) haben, ignoriert die Funktion die Soundex-Codenummer für den zweiten Buchstaben.
Einige Datenbanksysteme (z. B. Teradata) verwenden eine Variante, bei der die Soundex-Codenummer für den zweiten Buchstaben beibehalten wird, wenn für den ersten und den zweiten Buchstaben die gleiche Nummer gilt. Bei dieser Variante hat die Zeichenfolge Pfister
den Wert P123
(nicht P236
). Um diese Variante zu verwenden, rufen Sie stattdessen die Funktion SOUNDEX_P123 auf.
- Siehe auch:
Syntax¶
SOUNDEX( <varchar_expr> )
Argumente¶
varchar_expr
Zeichenfolge, für die eine Darstellung der Aussprache zurückgegeben wird. Für die Zeichenfolge sollte der lateinische oder Unicode-Zeichensatz verwendet werden.
Rückgabewerte¶
Der zurückgegebene Wert ist ein VARCHAR-Wert, der die phonetische Darstellung der Eingabezeichenfolge enthält. Mit anderen Worten, der Rückgabewert ist eine Zeichenfolge (kein Ton), die die Aussprache (nicht die Schreibweise) der Eingabezeichenfolge darstellt.
Beachten Sie Folgendes:
Der zurückgegebene Wert beginnt mit einem Buchstaben, der den ersten Buchstaben in der Zeichenfolge darstellt, gefolgt von 3 Ziffern (z. B.
s400
,c130
).Weitere Informationen zur Berechnung des Rückgabewerts finden Sie unter Phonetischer Soundex-Algorithmus (in Wikipedia).
Wie bereits erwähnt, rufen Sie stattdessen die Funktion SOUNDEX_P123 auf, wenn Sie die Variante verwenden möchten, bei der die Soundex-Codenummer für den zweiten Buchstaben beibehalten wird, wenn für den ersten und den zweiten Buchstaben die gleiche Nummer gilt.
Nutzungshinweise¶
Da die Funktion nur vier Zeichen (einen Buchstaben und drei Ziffern) zurückgibt, wird die Ausgabe in erster Linie von den ersten Silben der Eingabe und nicht von der gesamten Zeichenfolge bestimmt.
Die folgende Anweisung vergleicht beispielsweise drei Zeichenfolgen und gibt für jede Zeichenfolge denselben SOUNDEX-Wert zurück, da sie, obwohl sie völlig unterschiedliche Schreibweisen und Bedeutungen haben, mit phonetisch ähnlichen Silben beginnen:
SELECT SOUNDEX('I love rock and roll music.'), SOUNDEX('I love rocks and gemstones.'), SOUNDEX('I leave a rock wherever I go.'); +----------------------------------------+--------------------------+------------------------------------------+ | SOUNDEX('I LOVE ROCK AND ROLL MUSIC.') | SOUNDEX('I LOVE ROCKS.') | SOUNDEX('I LEAVE A ROCK WHEREVER I GO.') | |----------------------------------------+--------------------------+------------------------------------------| | I416 | I416 | I416 | +----------------------------------------+--------------------------+------------------------------------------+
Beispiele¶
Die folgende Abfrage gibt SOUNDEX-Werte für zwei Namen zurück, die unterschiedlich geschrieben sind, jedoch normalerweise ähnlich ausgesprochen werden:
SELECT SOUNDEX('Marks'), SOUNDEX('Marx'); +------------------+-----------------+ | SOUNDEX('MARKS') | SOUNDEX('MARX') | |------------------+-----------------| | M620 | M620 | +------------------+-----------------+
Die folgende Abfrage zeigt, wie Sie mit SOUNDEX potenziell verwandte Zeilen in verschiedenen Tabellen finden:
Erstellen und laden Sie die Tabellen:
CREATE TABLE sounding_board (v VARCHAR); CREATE TABLE sounding_bored (v VARCHAR); INSERT INTO sounding_board (v) VALUES ('Marsha'); INSERT INTO sounding_bored (v) VALUES ('Marcia');Suchen Sie nach verwandten Datensätzen ohne SOUNDEX:
SELECT * FROM sounding_board AS board, sounding_bored AS bored WHERE bored.v = board.v; +---+---+ | V | V | |---+---| +---+---+Suchen Sie mit SOUNDEXnach verwandten Datensätzen:
SELECT * FROM sounding_board AS board, sounding_bored AS bored WHERE SOUNDEX(bored.v) = SOUNDEX(board.v); +--------+--------+ | V | V | |--------+--------| | Marsha | Marcia | +--------+--------+