Найти подходящие записи с наименьшим количеством символов из Pattern - Oracle / Java - PullRequest
0 голосов
/ 08 ноября 2011

В веб-приложении, с которым я сейчас работаю, есть логика импорта файлов. Логика

1> читает записи из файла [excel или txt],
2> показывает недоступную для редактирования сетку всех импортированных записей [Новые записи помечаются как Новые, если их нет в базе данных, а существующие записи помечаются как Обновление] и
3> сбрасывает записи в базу данных.

файл, содержащий в файле контакты следующего формата (зеркально отображает столбцы базы данных с первичными ключами First_Name, Last_Name):

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

Проблема, с которой мы сталкиваемся, заключается в том, что в файл вводятся разные значения для одной и той же сущности. Например, кто-то может напечатать NY для New York, а кто-то - в Нью-Йорке. То же самое относится к имени или фамилии ex. Джон Майерс и Джон Майер ссылаются на одного и того же человека, но поскольку запись не совпадает точно, она вставляет запись, а не использует ее для обновления.

Пример, для записи из файла ( Обратите внимание, что использование имени и адреса чисто случайно:) ):

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

и запись в базе данных:

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

система должна была обнаружить запись в файле как существующую запись [из-за фамилии Myers и Myer и так как имя полностью совпадает] и выполнить обновление адреса, а вместо этого вставить новую значение.

Как я могу подойти к этой проблеме, когда я хотел бы найти все записи, которые будут выполнять сопоставление существующих записей в базе данных?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2011

Одним из решений, которое я мог бы придумать, является использование Regex в Oracle для достижения функциональности в некоторой степени.

Для каждого столбца я бы сгенерировал выражение Regex на половине длины строки.Например, для имени «Myer» в файле и «Myers» в базе данных будет работать следующий запрос:

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

Я бы рассмотрел это как частичное решение, потому что я быпроанализируйте входную строку и начните добавлять оператор none or only one от половины длины до конца строки и надеяться, что входная строка не так запуталась.

Надеемся найти отзывы других пользователей о SO для этого "решения".

0 голосов
/ 08 ноября 2011

Это очень сложная проблема, если вы знаете источники ваших данных, то вы можете попытаться вручную исправить различные комбинации ввода данных.

Остальное

Вы можете попробовать решения для очистки фонетических данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...