En MariaDB, SOUNDEX()
es una función de cadena incorporada que devuelve la cadena Soundex de una cadena dada.
Soundex es un algoritmo fonético para indexar nombres por sonido, como se pronuncia en inglés. Si dos palabras suenan igual, deben tener la misma cadena Soundex. Si dos palabras suenan similares, pero no exactamente iguales, su cadena Soundex puede parecer similar pero no exactamente igual.
La función acepta un argumento:la cadena desde la que devolver la cadena Soundex.
Sintaxis
La sintaxis es así:
SOUNDEX(str)
Donde str
es la cadena desde la que devolver la cadena Soundex.
Ejemplo
He aquí un ejemplo básico:
SELECT SOUNDEX('Bat');
Resultado:
+----------------+ | SOUNDEX('Bat') | +----------------+ | B300 | +----------------+
Aquí hay otro ejemplo que compara la cadena Soundex devuelta por palabras que suenan similares, pero diferentes:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap');
Resultado:
+----------------+----------------+----------------+ | SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') | +----------------+----------------+----------------+ | B300 | C300 | C100 | +----------------+----------------+----------------+
Y aquí hay uno que compara palabras que no suenan igual:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries');
Resultado:
+----------------------+--------------------+----------------------+ | SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') | +----------------------+--------------------+----------------------+ | A16353 | V240 | G6262 | +----------------------+--------------------+----------------------+
Debo mencionar que esta función implementa el algoritmo Soundex original que descarta las vocales primero y las duplica en segundo lugar. Esto contrasta con la versión mejorada, que descarta los duplicados primero y las vocales en segundo lugar.
Además, una cadena Soundex estándar tiene cuatro caracteres, pero SOUNDEX()
de MariaDB La función devuelve una cadena arbitrariamente larga. Por lo tanto, los resultados anteriores incluyen cuerdas Soundex no estándar.
Para ilustrar lo que quiero decir, este es el resultado que obtengo cuando uso SOUNDEX()
de Oracle función para hacer lo mismo:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries')
FROM DUAL;
Resultado:
SOUNDEX('APARTMENT') SOUNDEX('VEHICLE') SOUNDEX('GROCERIES') _______________________ _____________________ _______________________ A163 V240 G626
Coincidencias exactas
Aquí hay un ejemplo de pares de palabras que tienen una cadena Soundex coincidente, aunque son palabras diferentes, con significados diferentes:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two;
Resultado:
+------+------+------+------+ | Dam | Damn | Too | Two | +------+------+------+------+ | D500 | D500 | T000 | T000 | +------+------+------+------+
Ejemplo de base de datos
Este es un ejemplo de cómo obtener la cadena Soundex de una consulta de la base de datos:
SELECT
PetName,
SOUNDEX(PetName)
FROM Pets;
Resultado:
+---------+------------------+ | PetName | SOUNDEX(PetName) | +---------+------------------+ | Fluffy | F410 | | Fetch | F320 | | Scratch | S632 | | Wag | W200 | | Tweet | T000 | | Fluffy | F410 | | Bark | B620 | | Meow | M000 | +---------+------------------+
También podemos usar SOUNDEX()
en un WHERE
cláusula para devolver solo aquellas filas que suenan como una palabra determinada:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Resultado:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Sin embargo, es posible que prefiera usar SOUNDS LIKE
en cambio, que es una forma más concisa de hacer lo mismo.
Cadena vacía
Esto es lo que sucede cuando se pasa una cadena vacía para cada argumento dado:
SELECT SOUNDEX('');
Resultado:
+-------------+ | SOUNDEX('') | +-------------+ | | +-------------+
Argumentos nulos
Pasando null
devuelve null
:
SELECT SOUNDEX(null);
Resultado:
+---------------+ | SOUNDEX(null) | +---------------+ | NULL | +---------------+
Argumento faltante
Llamando a SOUNDEX()
con el número incorrecto de argumentos, o sin pasar ningún argumento da como resultado un error:
SELECT SOUNDEX();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'