sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona SOUNDEX() en MariaDB

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'