查找Pattern - Oracle / Java中包含最少字符的匹配记录

时间:2011-11-08 17:22:04

标签: java oracle

我目前正在使用的Web应用程序具有文件导入逻辑。逻辑

1>从文件[excel或txt]中读取记录,
2 - ;显示导入的所有记录的不可编辑网格[如果数据库中不存在新记录,则将新记录标记为新,并将现有记录标记为更新]和
3 GT;转储数据库中的记录。

包含文件中具有以下格式的联系人的文件(使用主键First_Name, Last_Name镜像数据库中的列):

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

我们遇到的问题是在文件中输入的同一实体有不同的值。例如,有人可能会在纽约打纽约,而其他人可能会在纽约打工。同样适用于名字或姓氏ex。约翰迈尔斯和约翰迈尔指的是同一个人,但由于记录不完全匹配,它会插入记录而不是重复使用记录。

示例,对于文件中的记录(请注意名称和地址用法纯属巧合:)):

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

和数据库中的记录:

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

系统应该检测到文件中的记录为现有记录[由于姓氏为MyersMyer,并且因为名字完全匹配]并对地址进行更新,但是而是插入一个新值。

我如何处理此问题,我希望找到所有可以对数据库中现有记录执行匹配的记录?

2 个答案:

答案 0 :(得分:0)

这是一个非常难以解决的问题,如果您知道数据来源,那么您可以尝试手动纠正数据输入的不同组合。

其他

您可以尝试使用语音数据清理解决方案

答案 1 :(得分:0)

我能想到的一个解决方案是在Oracle中使用Regex在某种程度上实现功能。

对于每一列,我会在字符串长度的一半生成Regex表达式。例如,对于文件中的名称“Myer”和数据库中的“Myers”,以下查询将起作用:

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

我认为这是一个部分解决方案,因为我会解析输入字符串并开始将none or only one运算符从一半长度附加到字符串的末尾,并希望输入字符串不会如此混乱。

希望从其他人那里找到关于这个“解决方案”的反馈意见。