Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在多个表中查找相似的名称_Sql_Sql Server_Tsql_Sql Like - Fatal编程技术网

Sql 在多个表中查找相似的名称

Sql 在多个表中查找相似的名称,sql,sql-server,tsql,sql-like,Sql,Sql Server,Tsql,Sql Like,我有多个具有不同客户名称的表。我试图找出同一个名字在一个表中出现了多少次。这里的挑战是,可能有人输入了“约翰·史密斯”或“史密斯,约翰”的名字 每个表中有40000行和40多个不同的表。我试图在不知道姓名的情况下进行查询,但仍然返回类似姓名的结果 基本上,我需要分组类似的名称,而不使用以下语句: WHERE cust_name LIKE '%john%' 当其中的数据格式可能不同时,如何使用其他表列的内容查询多个表列?如何最好地“清理”数据以删除逗号、空格等?这实际上不是数据库问题。真正的问题

我有多个具有不同客户名称的表。我试图找出同一个名字在一个表中出现了多少次。这里的挑战是,可能有人输入了“约翰·史密斯”或“史密斯,约翰”的名字

每个表中有40000行和40多个不同的表。我试图在不知道姓名的情况下进行查询,但仍然返回类似姓名的结果

基本上,我需要分组类似的名称,而不使用以下语句:

WHERE cust_name LIKE '%john%'

当其中的数据格式可能不同时,如何使用其他表列的内容查询多个表列?如何最好地“清理”数据以删除逗号、空格等?

这实际上不是数据库问题。真正的问题是提出一种算法,该算法将采用一个名称并将其转换为标准格式。这很难做到,而且实际上取决于源数据的外观。我会仔细查看您的源数据,并尝试找出一些要查找的模式,然后使用常规字符串操作将它们全部更改为相同的格式。

您可以在SSIS中使用模糊逻辑。我已经成功地使用模糊格言来查找重复项——尽管您希望匹配的不仅仅是名称,因为许多人使用相同的名称。我用姓名、地址、电话和电子邮件进行了匹配。模糊分组允许您使用多个字段进行匹配

名称匹配可能是一项非常棘手的工作。你不仅需要担心“约翰·史密斯”对“史密斯,约翰”,还需要担心凯瑟琳对凯瑟琳对凯特对凯西对凯西。我确信有第三方数据挖掘解决方案可以解决类似的问题,尽管我无法推荐

如果您知道您的名字只有“FirstName LastName”和“LastName,FirstName”两种形式,那么您可以尝试以下方式:

SELECT
    CASE
        WHEN name LIKE '%,%'
            THEN SUBSTRING(name, CHARINDEX(',', name) + 2, LEN(name)) + ' ' +
                 SUBSTRING(name, 1, CHARINDEX(',', name) - 1)
        ELSE name
    END AS name
字符串函数可能取决于特定的RDBMS。而且,这是相当脆弱的。它依赖于精确的格式,在列后面有一个空格,等等。如果你想要更好,你需要调整它

我还建议您在四十个表上添加一个视图作为一个UNION ALL,这样您就可以同时处理所有表。也许将某些内容硬编码到视图中,以便知道每行来自哪个表

最后,您可以考虑使用soundex,但如果您没有使用soundex的经验,那么实现它可能会很困难