Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL在两个字段中查找不同的字符_Sql_Tsql_Compare - Fatal编程技术网

SQL在两个字段中查找不同的字符

SQL在两个字段中查找不同的字符,sql,tsql,compare,Sql,Tsql,Compare,我有一个包含两个字段的表:firstnamedb1和firstnamedb2 我需要得到那些不匹配的字符,但也想知道有多少字符是不同的 例如,如果我有: firstnamedb1 firstnamedb2 RICHARD RICHRAD 然后我知道这是一个不匹配的结果,但我也知道只有两个字符是不同的 这样我就知道“可能”没有匹配结果是一个错误类型错误,可以很容易地手动修复 希望有人能帮助我。非常感谢选择firstnamedb1、firstnamedb2、d

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

我需要得到那些不匹配的字符,但也想知道有多少字符是不同的

例如,如果我有:

firstnamedb1        firstnamedb2
RICHARD             RICHRAD
然后我知道这是一个不匹配的结果,但我也知道只有两个字符是不同的

这样我就知道“可能”没有匹配结果是一个错误类型错误,可以很容易地手动修复

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

选择firstnamedb1、firstnamedb2、dbo.numdiffchars(firstnamedb1、firstnamedb2)
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
从你的桌子上 其中firstnamedb1 firstnamedb2 创建函数dbo.numdiffchars(@n1 varchar(60),@n2 varchar(60)) 返回整数 作为开始 声明@baselen int, @扩展名int, @xpos int, @numdiff int;
如果len(@n1),我想不出一个解决方案,它的实现将不会异常繁琐。再加上很多西方名字只有一个字母不同(Jay Jan、Alex Alec、Simon Simone),我不禁质疑你的方法。为了计算有多少字母不同(以及处理不同长度的名称),您可能需要做一些更粗糙的事情,并在看到其他内容时执行。Paul和Paula可能是幸福的婚姻(或者你所代表的任何关系),Paula临床上很沮丧,因为人们不断地把她的名字改成Paul。我在运行它,但我得到的是空的,有什么线索吗?谢天谢地,我唯一想到的是被比较的名字中是否有一个是空的;我还没有构建适应这种情况的函数,但是如果是这种情况,请将select语句更改为:select firstnamedb1、firstnamedb2、dbo.numdiffchars(isnull(firstnamedb1)、、isnull(firstnamedb2.),从您的表中选择isnull(firstnamedb1)、)isnull(firstnamedb2“”)