In MariaDB, SOUNDEX()
ist eine eingebaute String-Funktion, die den Soundex-String aus einem gegebenen String zurückgibt.
Soundex ist ein phonetischer Algorithmus zum Indizieren von Namen nach Ton, wie sie im Englischen ausgesprochen werden. Wenn zwei Wörter gleich klingen, sollten sie den gleichen Soundex-String haben. Wenn zwei Wörter ähnlich, aber nicht genau gleich klingen, sieht ihre Soundex-Zeichenfolge möglicherweise ähnlich, aber nicht genau gleich aus.
Die Funktion akzeptiert ein Argument:die Zeichenfolge, von der die Soundex-Zeichenfolge zurückgegeben werden soll.
Syntax
Die Syntax lautet wie folgt:
SOUNDEX(str)
Wobei str
ist die Zeichenfolge, für die die Soundex-Zeichenfolge zurückgegeben werden soll.
Beispiel
Hier ist ein einfaches Beispiel:
SELECT SOUNDEX('Bat');
Ergebnis:
+----------------+ | SOUNDEX('Bat') | +----------------+ | B300 | +----------------+
Hier ist ein weiteres Beispiel, das die Soundex-Zeichenfolge vergleicht, die von ähnlichen, aber unterschiedlich klingenden Wörtern zurückgegeben wird:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap');
Ergebnis:
+----------------+----------------+----------------+ | SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') | +----------------+----------------+----------------+ | B300 | C300 | C100 | +----------------+----------------+----------------+
Und hier ist einer, der Wörter vergleicht, die nicht gleich klingen:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries');
Ergebnis:
+----------------------+--------------------+----------------------+ | SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') | +----------------------+--------------------+----------------------+ | A16353 | V240 | G6262 | +----------------------+--------------------+----------------------+
Ich sollte erwähnen, dass diese Funktion den ursprünglichen Soundex-Algorithmus implementiert, der zuerst Vokale verwirft und dann dupliziert. Dies steht im Gegensatz zur erweiterten Version, die zuerst Duplikate und dann Vokale verwirft.
Außerdem ist eine Standard-Soundex-Zeichenfolge vier Zeichen lang, aber MariaDBs SOUNDEX()
Funktion gibt einen beliebig langen String zurück. Daher enthalten die obigen Ergebnisse nicht standardmäßige Soundex-Saiten.
Um zu veranschaulichen, was ich meine, ist hier das Ergebnis, das ich erhalte, wenn ich Oracles SOUNDEX()
verwende Funktion, um dasselbe zu tun:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries')
FROM DUAL;
Ergebnis:
SOUNDEX('APARTMENT') SOUNDEX('VEHICLE') SOUNDEX('GROCERIES') _______________________ _____________________ _______________________ A163 V240 G626
Genaue Übereinstimmungen
Hier ist ein Beispiel für Wortpaare, die eine übereinstimmende Soundex-Zeichenfolge haben, obwohl es sich um unterschiedliche Wörter mit unterschiedlichen Bedeutungen handelt:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two;
Ergebnis:
+------+------+------+------+ | Dam | Damn | Too | Two | +------+------+------+------+ | D500 | D500 | T000 | T000 | +------+------+------+------+
Datenbankbeispiel
Hier ist ein Beispiel für das Abrufen der Soundex-Zeichenfolge aus einer Datenbankabfrage:
SELECT
PetName,
SOUNDEX(PetName)
FROM Pets;
Ergebnis:
+---------+------------------+ | PetName | SOUNDEX(PetName) | +---------+------------------+ | Fluffy | F410 | | Fetch | F320 | | Scratch | S632 | | Wag | W200 | | Tweet | T000 | | Fluffy | F410 | | Bark | B620 | | Meow | M000 | +---------+------------------+
Wir können auch SOUNDEX()
verwenden in einem WHERE
-Klausel, um nur die Zeilen zurückzugeben, die wie ein bestimmtes Wort klingen:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Ergebnis:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Möglicherweise bevorzugen Sie jedoch die Verwendung von SOUNDS LIKE
stattdessen, was eine kürzere Möglichkeit ist, dasselbe zu tun.
Leerer String
Folgendes passiert, wenn für jedes angegebene Argument eine leere Zeichenfolge übergeben wird:
SELECT SOUNDEX('');
Ergebnis:
+-------------+ | SOUNDEX('') | +-------------+ | | +-------------+
Null-Argumente
Übergabe von null
gibt null
zurück :
SELECT SOUNDEX(null);
Ergebnis:
+---------------+ | SOUNDEX(null) | +---------------+ | NULL | +---------------+
Fehlendes Argument
Aufruf von SOUNDEX()
mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT SOUNDEX();
Ergebnis:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'