T-SQL:比较2列具有未知值(T-SQL: compare 2 columns with unkn

2019-10-30 06:36发布

我为了加入一个表与自身找人在我的表在同一家族中不同的姓氏。 唯一的问题是存在这样的情况,其中一个姓可能是琼斯,和另一条记录的列可能是琼斯小

这在技术上是相同的姓氏,使他们不符合我的要求。 我需要从我的结果消除琼斯小。

在复杂的因素是它也可能是像史密斯 - 琼斯,所以我需要将它删除这条记录。 因为我不知道区别在哪里将是我希望能够增加一个条件,我的查询说,不超过4个(或某个任意数)每个名称的字符可以匹配。

这里是我的查询:

SELECT [fields] 
FROM [table] a 
INNER JOIN [table] b ON a.[family_id] = b.[family_id]
WHERE a.[last_name] <> b.[last_name]

有任何想法吗?

Answer 1:

你可以使用差异。 返回的值是在是相同的SOUNDEX值的字符数。 的返回值的范围从0到4:0表示弱或没有相似性,和图4表示很强的相似或相同的值。 这将是一个很好的解决方案,以您的需求:寻找我的表的人在同一个家庭有不同的姓氏

SELECT [fields] from [table] a 
INNER JOIN [table] b
ON a.[family_id] = b.[family_id]
WHERE DIFFERENCE(a.[last_name], b.[last_name]) < 4


Answer 2:

使用通配符进行比较。 下面的工作,可能你想要的东西:

SELECT [fields]
from [table] a INNER JOIN
     [table] b
     ON a.[family_id] = b.[family_id]
WHERE a.last_name not like '%' + b.last_name + '%' and
      b.last_name not like '%' + a.last_name + '%';

当然,“约翰”和“强生”和“马丁”和“马丁内斯”也将不匹配。 我不知道这是一个问题。



文章来源: T-SQL: compare 2 columns with unknown values