Herramientas

Truco SQL: Búsqueda fonética en SQL Server

Una tarea más complicada de lo que podríamos pensar es buscar nombres en una base de datos. Especialmente si no están en nuestro idioma y sabemos cómo se escriben correctamente. La solución en este caso es emplear un algoritmo fonético, como puede ser el caso de SOUNDEX, para buscar por su sonido, no por su escritura. Afortunadamente para los usuarios de SQL Server están disponibles las funciones SOUNDEX y DIFFERENCE con las que respectivamente se obtiene el índice SOUNDEX de una cadena y la diferencia entre dos, respectivamente. Así que podemos usar la función DIFFERENCE para realizar una búsqueda fonética en SQL Server.

El código SOUNDEX

Al aplicar el algoritmo SOUNDEX una cadena de texto este genera un código que consiste en una letra seguida de tres números. Siendo la letra la primera del nombre y los números codifican el resto de las consonantes. Así, por ejemplo, el nombre “Rodríguez” tiene asociado el código R362, al igual que “Rodrigues”. Aunque no sean el mismo apellido. Por otro lado, otro apellido como “Diez” tiene asociado el código D200.

El grado de similitud de dos cadenas de texto se miden por el número coincidencias en la cadena. En los ejemplos anteriores, “Rodríguez” y “Rodrigues” tienen el mismo código, por lo que su grado de coincidencia es 4. Mientras que “Diez” no se parece en nada a los anteriores, por lo que el grado de coincidencia es 0. Siendo este el valor que devuelve la función DIFFERENCE.

Buscar en un nombre

Ahora que entendemos lo que hace la función DIFFERENCE se puede usar para realizar una búsqueda fonética en SQL Server. Simplemente tenemos que escribir una consulta como la siguiente.

SELECT last_name FROM clients WHERE DIFFERENCE(last_name, 'Rodríguez') = 4

En la que se exige que el código SOUNDEX sea el mismo en ambos casos.

Buscar en una cadena de caracteres completo

La consulta anterior se puede utilizar cuando se busca un nombre en un campo. Pero qué pasa si en el campo está el nombre completo. En este caso el algoritmo solo se aplicará al primer nombre, ya que este generará un único código. Para solucionar esto se puede dividir el nombre completo con STRING_SPLIT y comparar todas las subcadenas.

SELECT full_name FROM clients
OUTER APPLY STRING_SPLIT(full_name, ' ') a
WHERE DIFFERENCE(a.value, 'Rodríguez') = 4

Conclusiones

Ahora ya sabemos cómo hacer una búsqueda fonética en SQL Server. Aunque el algoritmo SOUNDEX está diseñado para funcionar en inglés, es una buena aproximación a la hora de hacer búsquedas en cadenas de texto.

Imagen de Theodor Moise en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…

2 días ago

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

En la serie Creación de una API REST con Express y TypeScript construimos una API…

4 días ago

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…

1 semana ago

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…

2 semanas ago

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

2 semanas ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

3 semanas ago

This website uses cookies.