根据数据库列与另一个数据库列的相似性更新数据库列

时间:2016-04-14 14:57:29

标签: sql sql-server tsql

我有一个数据库表(Customers),其中包含以下列:

ID
FIRST_NAME
MIDDLE_INIT
LAST_NAME
FULL_NAME

我还有一个数据库表(ENG),其中包含以下列:

ID
ENG_NAME

我想用ENG.ENG_NAME表中的FULL_NAME条目替换所有CUSTOMERS条目

这是问题所在 ENG_NAME通过网络表单被手工卡住,因此没有一致性。例如,一行可能包含" Robin Hood"。另一个" Hood,Robin L"。另一个" Robin L Hood"。

我想搜索CUSTOMERS表格中的条目,找到一个匹配的匹配项,然后将ENG.ENG_NAME替换为CUSTOMERS.FULL_NAME

示例:

ENG table              CUSTOMERS table          
ID      ENG_NAME       ID      FULL_NAME        FIRST_NAME     MIDDLE_INIT      LAST_NAME
================       ==================================================================        
1       Hood,Robin     1       Robin L Hood     Robin          L                Hood
2       Rob Hood       2       Maid M Marion    Maid           M                Marion
3       Marion M       3       Friar F Tuck     Friar          F                Tuck
4       Rob Garza      4       Robert A Garza   Robert         A                Garza

根据上面的数据,我希望ENG_NAME列被替换为:

ENG table
ID      ENG_NAME
====================
1       Robin L Hood
2       Robin L Hood
3       Maid M Marion
4       Robert A Garza

有关如何做到这一点的任何想法? 感谢

2 个答案:

答案 0 :(得分:1)

这不是一项简单的任务,我会从找到一个好的C#(或任何.NET)算法来检测类似的字符串部分。

然后看看将C#代码编译成SQL存储过程并使用SQL Server调用该代码。然后,此CLR代码可以将结果写入表格,供您分析并随意执行任何操作。

更多信息:CLR SQL Server User-Defined Function

答案 1 :(得分:0)

我会使用Levenshtein距离在.NET中执行此操作。

从1开始,你将有一些关系,你需要决定 然后转到2,3,4 ...

你可以在CLR中做,但你打算怎么处理关系?你会有联系。你怎么决定什么时候不匹配?

我会将它放在新专栏中,以便您拥有原始数据的历史记录 或FK对客户表的引用