0

我正在尝试加入 2 个具有公共列“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 行

4

1 回答 1

1

像这样的东西对你有用吗?

select * from [Table A] a join [Table B] b On 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

于 2013-12-12T04:03:49.370 回答