sql连接2个表,如果它们具有相似的名称/值

时间:2013-12-11 12:50:58

标签: sql sql-server join rdbms soundex

我正在尝试连接两个具有公共列“NAME”的表,但数据的排序方式如下:


表A

NAME
B C Corporations
Tefal Inc.
West, Tom
Anne Zagabi
(C) NamyangSoy

表B

NAME
BC Corporations
Tefal Inc
Tom West
AnneZagabi
( C ) NamyangSoy

以上是我遇到的情况。 它真的很难看,但有一件事让我觉得sql可能是两个表中至少有一个单词的拼写是相同的。

但是,我尝试过soundex但是代码实际上不是英文的,所以它不起作用(以上只是我用英语编写的一个例子)。我已经尝试了差异功能,但它也没有用(一切都有价值4,我猜因为它不是英文的?我不确定)。

我尝试逐字加入,但它也没有用。我希望是否有任何其他方法可以做到这一点..我正在使用sqlcanvas,数据库是sybase。两个表都有近30列,每行约12,000行

1 个答案:

答案 0 :(得分:1)

这样的事情对你有用吗?

从[表A]中选择*连接[表B] b 在REPLACE(a.Name,'','')= REPLACE(b.Name,'','')

使用“替换”功能删除所有空格并比较结果。

例如,运行此

 select
 CASE
 WHEN REPLACE('T  E  S  T', ' ', '') =  REPLACE('TE  ST', ' ', '')  THEN  'TRUE' else 'FALSE'
 END

使用代码替换所有非字母字符:

CREATE FUNCTION [dbo].[fncRemoveNonAlphanumericChars](@Temp VarChar(1000))
RETURNS VarChar(1000)
AS
BEGIN
WHILE PatIndex('%[^A-Za-z0-9]%', @Temp) > 0
SET @Temp = Stuff(@Temp, PatIndex('%[^A-Za-z0-9]%', @Temp), 1, '')

RETURN @TEmp
END

示例:

SELECT dbo.fncRemoveNonAlphanumericChars('abc...DEF,,,GHI(((123)))456jklmn')

结果:

abcDEFGHI123456jklmn

(这是来自这里:http://jayhollingum.blogspot.com/2011/01/sql-server-remove-non-alphanumeric.html