如何在sql上搜索名称(可选)第二个名称、姓氏?

pdsfdshx  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(405)

我通常不是sql用户,但需要从mssql上的人员列表中查找匹配的姓名/姓氏。我正在尝试从tablename中找到相似的名字来匹配我拥有的人的列表。线条如下所示:

Select * 
from TABLENAME(nolock)
Where SomeRule='04' and RTRIM(Name) +' ' + RTRIM(SecondName) +' '+RTRIM(Surname) in (THE LIST OF PEOPLE HERE)

但是这个方法只能让我匹配那些有第二个名字的人。如果一个人没有第二个名字,但他们的名字+姓氏匹配,它不会出现。我想看到的人谁有100%匹配的名字,第二个名字姓氏或姓名姓氏(如果他们没有第二个名字)。
先谢谢你们

tkclm6bt

tkclm6bt1#

提供的人员列表是一张表

Select distinct t.* 
from TABLENAME t
join [THE LIST OF PEOPLE HERE] lp on SomeRule='04' 
     and RTRIM(t.Name) = lp.Name 
     and RTRIM(t.Surname) = lp.Surname 
     and (t.SecondName is null and pl.SecondName is null or RTRIM(t.SecondName) = lp.SecondName)
x759pob2

x759pob22#

让我们看一些行:
namesecondnamesnamesremark将中间名为“john thomas smith”的“john thomas smith”person与中间名为“john thomas smith”的“john”person连接起来,中间名为“john”  史密斯,约翰,史密斯,中间名不详的人
找不到没有中间名的人,因为在您创建的字符串中有两个空格分隔名字和姓氏。找不到我们不知道中间名的人,因为连接的字符串为空。
你可以用 CASE WHEN 要对此进行检查并做出相应React:

select * 
from tablename
where somerule = '04'
and
  rtrim(name) + ' ' + 
  case when rtrim(secondname) is null then ''
       when rtrim(secondname) = '' then ''
       else rtrim(secondname) + ' '
  end +
  rtrim(surname) in (the list of people here)

相关问题