MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie SOUNDEX() in MariaDB funktioniert

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'