【问题标题】:SQL find characters different in two fieldsSQL在两个字段中查找不同的字符
【发布时间】:2013-07-05 01:43:02
【问题描述】:

我有一个包含两个字段的表:firstnamedb1 和 firstnamedb2

我需要获取那些不匹配的,但也想知道有多少个字符不同。

例如,如果我有:

firstnamedb1        firstnamedb2
RICHARD             RICHRAD

然后我知道这是一个 NO MATCH 结果,但我也知道只有 2 个字符不同。

这样我就知道“也许”NO MATCH 结果是一个错误类型错误,可以很容易地手动修复。

希望有人可以帮助我。非常感谢

【问题讨论】:

  • 我想不出一个实施起来不会特别繁琐的解决方案。再加上很多西方名字只有一个字母不同(Jay-Jan、Alex-Alec、Simon-Simone)的事实,我不禁质疑你的方法。尽管您将努力计算有多少不同的字母(并处理不同长度的名称),但您可能希望使一些更粗糙的东西并在视线中执行其余部分。 Paul 和 Paula 可能已经幸福地结婚了(或者你所代表的任何关系),而 Paula 临床上很沮丧,因为人们不断将她的名字改成 Paul。

标签: sql tsql compare


【解决方案1】:
select firstnamedb1, firstnamedb2, dbo.numdiffchars(firstnamedb1, firstnamedb2)
from yourTable
where firstnamedb1 <> firstnamedb2


create function dbo.numdiffchars(@n1 varchar(60), @n2 varchar(60))
returns int
as begin
  declare @baselen int,
          @extension int,
          @xpos int,
          @numdiff int;
  if len(@n1) <= len(@n2) select @baselen = len(@n1)
  else select @baselen = len(@n2)

  if len(@n1) < @baselen select @extension = (@baselen - len(@n1))
  else if len(@n2) < @baselen select @extension = (@baselen - len(@n2))

  select @xpos = 0, @numdiff = 0;
  while @xpos < @baselen begin
    select @xpos = @xpos + 1
    if substring(@n1, @xpos, 1) <> substring(@n2, @xpos, 1)
      select @numdiff = @numdiff + 1
  end

  return @numdiff + @extension
end

如果这解决了您的问题,请标记为答案。

【讨论】:

  • 我正在运行它,但我得到 NULL,有什么线索吗?非常感谢
  • 唯一想到的是被比较的名称之一是否为空;我还没有构建函数来适应这种情况,但如果是这种情况,请将 select 语句更改为: select firstnamedb1, firstnamedb2, dbo.numdiffchars(isnull(firstnamedb1, ''), isnull(firstnamedb2, '')) from yourTable其中 isnull(firstnamedb1, '') isnull(firstnamedb2, '')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
相关资源
最近更新 更多