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.
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.
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.
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
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
En un entrada previa explicamos qué son el WOE y el IV y por qué…
Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…
“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…
Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…
Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…
Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…
This website uses cookies.