【问题标题】:Find matching records with least characters from Pattern - Oracle / Java从 Pattern - Oracle / Java 中查找具有最少字符的匹配记录
【发布时间】:2011-11-09 10:17:37
【问题描述】:

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

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

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

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

我们遇到的问题是文件中输入的同一实体有不同的值。例如,有人可能会为 New York 输入 NY,而其他人会输入 New York。同样适用于名字或姓氏ex。 John Myers 和 John Myer 指的是同一个人,但由于记录不完全匹配,它插入记录而不是重复使用它进行更新。

例如,文件中的记录(请注意姓名和地址使用纯属巧合:)):

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

以及数据库中的记录:

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

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

如何解决这个问题,即我想找到所有可以对数据库中现有记录执行匹配的记录?

【问题讨论】:

    标签: java oracle


    【解决方案1】:

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

    否则

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

    【讨论】:

      【解决方案2】:

      我能想到的一个解决方案是在 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 运算符从长度的一半附加到字符串的末尾,并希望输入字符串不会那么混乱。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多