T-SQL:将2列与未知值进行比较

时间:2014-08-27 16:12:38

标签: sql sql-server-2005

我正在为自己加入一张桌子,以便在同一家庭中找到不同姓氏的人。唯一的问题是有一个姓氏可能是Jones的情况,而另一个记录的列可能是Jones Jr.

这些在技术上是相同的姓氏,因此它们不符合我的要求。我需要从我的结果中消除Jones Jr.

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

这是我的疑问:

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

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

使用通配符进行比较。以下内容可能适合您的需要:

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 + '%';

当然,&#34;约翰斯&#34;和&#34;约翰逊&#34;和#34; Martin&#34;和#34; Martinez&#34;也将无法匹配。我不知道这是不是一个问题。

答案 1 :(得分:0)

你可以使用DIFFERENCE。返回的值是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