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

De la Regresión Logística al Scorecard: La Transformación Matemática

En un entrada previa explicamos qué son el WOE y el IV y por qué…

22 horas ago

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…

2 días ago

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

6 días ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

1 semana ago

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…

2 semanas ago

WOE e IV: La Base Matemática del Credit Scoring

Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…

2 semanas ago

This website uses cookies.