我们有公司名称和数字主键标识的表格。我们正在清理数据,我们发现名称列中充满了代表同一公司的类似名称。
E.g。 BA和Ba或GTC Ltd和GTC Limited。
无论如何使用SQL服务器我们可以获得具有相似名称和ID列表的所有项目的计数和摘要。我想知道是否存在某种相似性比较,我们可以设置等值的阈值
我们需要向客户端提供一个看起来需要合并的名称列表。
答案 0 :(得分:1)
您的答案取决于SoundEx()
和Difference()
函数。
DECLARE @a varchar(50) = 'BA'
, @b varchar(50) = 'Ba'
;
SELECT @a
, @b
, SoundEx(@a)
, SoundEx(@b)
, Difference(@a, @b)
;
SET @a = 'GTC Ltd';
SET @b = 'GTC Limited';
SELECT @a
, @b
, SoundEx(@a)
, SoundEx(@b)
, Difference(@a, @b)
;
SET @a = 'BLAH';
SELECT @a
, @b
, SoundEx(@a)
, SoundEx(@b)
, Difference(@a, @b)
;
此SoundEx
as “听起来像” - 它是一个返回输入表示的函数,您可以将其与其他输出进行比较。
Difference()
函数返回0到4之间的值,其中较高的数字代表更好的匹配。
答案 1 :(得分:1)
有很多功能可以检查相似之处。 MS SQL提供了SOUNDEX
和DIFFERENCE
函数,这些函数我从未实际使用过。
虽然我曾经在PHP中使用Levenshtein(将string1转换为string2的最小编辑),但它非常有效。以下是Devio's implementation in TSQL作为一个函数,您可以将其放入代码中:
SELECT
LEVENSHTEIN(COL1, COL2)
FROM
ExampleTable
或WHERE
条件:
SELECT
COL1, COL2
FROM
ExampleTable
WHERE
LEVENSHTEIN(COL1, COL2) < 5
在这里,我建议您实施一些CASE - WHEN - THEN
逻辑,以便根据需要找到正确的levenshtein距离。
答案 2 :(得分:1)
基本答案是“不”。名称整改是一个难题。 “GTC Ltd”和“GTC Limited”这两个名称与“GTC”和“GTE”(通过更明显的措施)有所不同。为此目的,有外部服务机构和专用软件。
如果您处理的是少量数据,我建议您按字母顺序排列值,将它们加载到Excel中,然后在Excel中添加一个带有“官方”名称的列。然后,您可以将其重新导入为数据库中的表,以执行您想要的操作。如果您删除已知的后缀和前缀,例如“ltd”,“bros”,“partners”等,它可能会有所帮助。
如果您尝试沿soundex()
之类的路径前进,请确保understand it well。例如,以下两个字符串的soundex()
值是相同的:“gte,blah blah blah”和“gdteey,junk goes here”。
答案 3 :(得分:0)
您可以使用COLLATE UTF8_GENERAL_CI
和LIKE
运算符来检查BA and Ba
。
但是对于GTC Ltd and GTC Limited
你仍然可以使用相同的但是你应该手动检查它们并仔细合并。