MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona SOUNDEX() in MariaDB

In MariaDB, SOUNDEX() è una funzione di stringa incorporata che restituisce la stringa Soundex da una determinata stringa.

Soundex è un algoritmo fonetico per l'indicizzazione dei nomi in base al suono, pronunciato in inglese. Se due parole suonano allo stesso modo, dovrebbero avere la stessa stringa Soundex. Se due parole suonano simili, ma non esattamente uguali, la loro stringa Soundex potrebbe sembrare simile ma non esattamente la stessa.

La funzione accetta un argomento:la stringa da cui restituire la stringa Soundex.

Sintassi

La sintassi è questa:

SOUNDEX(str)

Dove str è la stringa da cui restituire la stringa Soundex.

Esempio

Ecco un esempio di base:

SELECT SOUNDEX('Bat');

Risultato:

+----------------+
| SOUNDEX('Bat') |
+----------------+
| B300           |
+----------------+

Ecco un altro esempio che confronta la stringa Soundex restituita da parole simili, ma diverse, dal suono:

SELECT 
    SOUNDEX('Bat'),
    SOUNDEX('Cat'),
    SOUNDEX('Cap');

Risultato:

+----------------+----------------+----------------+
| SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') |
+----------------+----------------+----------------+
| B300           | C300           | C100           |
+----------------+----------------+----------------+

Ed eccone uno che confronta parole che non suonano allo stesso modo:

SELECT 
    SOUNDEX('Apartment'),
    SOUNDEX('Vehicle'),
    SOUNDEX('Groceries');

Risultato:

+----------------------+--------------------+----------------------+
| SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') |
+----------------------+--------------------+----------------------+
| A16353               | V240               | G6262                |
+----------------------+--------------------+----------------------+

Dovrei menzionare che questa funzione implementa l'algoritmo Soundex originale che scarta prima le vocali e poi duplica. Ciò è in contrasto con la versione migliorata, che scarta prima i duplicati e poi le vocali.

Inoltre, una stringa Soundex standard è lunga quattro caratteri, ma SOUNDEX() di MariaDB la funzione restituisce una stringa arbitrariamente lunga. Pertanto i risultati di cui sopra includono stringhe Soundex non standard.

Per illustrare cosa intendo, ecco il risultato che ottengo quando utilizzo SOUNDEX() di Oracle funzione per fare la stessa cosa:

SELECT 
    SOUNDEX('Apartment'),
    SOUNDEX('Vehicle'),
    SOUNDEX('Groceries')
FROM DUAL;

Risultato:

   SOUNDEX('APARTMENT')    SOUNDEX('VEHICLE')    SOUNDEX('GROCERIES') 
_______________________ _____________________ _______________________ 
A163                    V240                  G626                   

Corrispondenze esatte

Ecco un esempio di coppie di parole che hanno una stringa Soundex corrispondente, anche se sono parole diverse, con significati diversi:

SELECT 
    SOUNDEX('Dam') AS Dam, 
    SOUNDEX('Damn') AS Damn, 
    SOUNDEX('Too') AS Too, 
    SOUNDEX('Two') AS Two;

Risultato:

+------+------+------+------+
| Dam  | Damn | Too  | Two  |
+------+------+------+------+
| D500 | D500 | T000 | T000 |
+------+------+------+------+

Esempio di database

Ecco un esempio di come ottenere la stringa Soundex da una query del database:

SELECT 
    PetName, 
    SOUNDEX(PetName)
FROM Pets;

Risultato:

+---------+------------------+
| PetName | SOUNDEX(PetName) |
+---------+------------------+
| Fluffy  | F410             |
| Fetch   | F320             |
| Scratch | S632             |
| Wag     | W200             |
| Tweet   | T000             |
| Fluffy  | F410             |
| Bark    | B620             |
| Meow    | M000             |
+---------+------------------+

Possiamo anche usare SOUNDEX() in un WHERE clausola per restituire solo quelle righe che suonano come una determinata parola:

SELECT 
    PetName, 
    SOUNDEX(PetName),
    SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');

Risultato:

+---------+------------------+-----------------+
| PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') |
+---------+------------------+-----------------+
| Wag     | W200             | W200            |
+---------+------------------+-----------------+

Tuttavia, potresti preferire usare SOUNDS LIKE invece, che è un modo più conciso di fare la stessa cosa.

Stringa vuota

Ecco cosa succede quando viene passata una stringa vuota per ogni dato argomento:

SELECT SOUNDEX('');

Risultato:

+-------------+
| SOUNDEX('') |
+-------------+
|             |
+-------------+

Argomenti nulli

Passaggio null restituisce null :

SELECT SOUNDEX(null);

Risultato:

+---------------+
| SOUNDEX(null) |
+---------------+
| NULL          |
+---------------+

Argomento mancante

Chiamando SOUNDEX() con il numero errato di argomenti o senza passare alcun argomento genera un errore:

SELECT SOUNDEX();

Risultato:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'