Encuentre registros coincidentes con la menor cantidad de caracteres del patrón - Oracle / Java

La aplicación web en la que estoy trabajando actualmente tiene una lógica de importación de archivos. La lógica

1> lee los registros de un archivo [excel o txt],
2> muestra una cuadrícula no editable de todos los registros importados [Los registros nuevos se marcan como Nuevos si no existen en la base de datos y los registros existentes se marcan como Actualización] y
3> vuelca los registros en la base de datos.

un archivo que contiene contactos con el siguiente formato en el archivo (refleja las columnas en la base de datos con claves primarias First_Name, Last_Name):

First_Name, Last_Name, AddressLine1, AddressLine2, City, State, Zipcode

El problema con el que nos encontramos es cuando se ingresan valores diferentes para la misma entidad en el archivo. Por ejemplo, alguien podría escribir NY para Nueva York mientras que otros escribirían Nueva York. Lo mismo se aplica al nombre o apellido ej. John Myers y John Myer se refieren a la misma persona, pero debido a que el registro no coincide exactamente, inserta el registro en lugar de reutilizarlo para una actualización.

Ejemplo, para el registro del archivo (Tenga en cuenta que el uso del nombre y la dirección es pura coincidencia :) ):

John, Myers, 44 Chestnut Hill, Apt 5, Indiana, Indiana, 11111

y el registro en la base de datos:

John, Myer, 80 Washington St, Apt 1, Chicago, IL, 3333

el sistema debería haber detectado el registro en el archivo como registro existente [debido a que el apellido es Myers y Myer y dado que el nombre coincide completamente] y actualiza la Dirección, sino que inserta un nuevo valor.

¿Cómo puedo abordar este problema en el que me gustaría encontrar todos los registros que realizarían la coincidencia en los registros existentes en la base de datos?

preguntado el 08 de noviembre de 11 a las 17:11

2 Respuestas

Es un problema muy difícil de resolver, si conoce las fuentes de sus datos, entonces podría intentar rectificar manualmente las diferentes combinaciones de entrada de datos.

otro

podría probar con soluciones de limpieza de datos fonéticos

respondido 08 nov., 11:21

Una solución en la que podría pensar es usar Regex en Oracle para lograr la funcionalidad hasta cierto punto.

Para cada una de las columnas, generaría una expresión Regex a la mitad de la longitud de la cadena. Por ejemplo, para el nombre "Myer" en el archivo y "Myers" en la base de datos, la siguiente consulta funcionaría:

SELECT Last_Name from Contacts WHERE (Last_Name IS NULL OR Regexp_Like(Last_Name, '^Mye?r?$'))

Consideraría esto como una solución parcial porque analizaría la cadena de entrada y comenzaría a agregar el none or only one operador desde la mitad de la longitud hasta el final de la cadena y esperando que la cadena de entrada no esté tan desordenada.

Espero encontrar comentarios de otros sobre SO para esta "solución".

respondido 09 nov., 11:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.