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'