【问题标题】:How to search name, (OPTIONAL) second name, surname on SQL?如何在 SQL 上搜索姓名、(可选)第二名、姓氏?
【发布时间】:2021-07-21 11:45:08
【问题描述】:

我通常不是 SQL 人员,但需要从 MSSql 上的人员列表中查找匹配的姓名/姓氏。我正在尝试从 TABLENAME 中找到相似的名称以匹配我拥有的人员列表。该行如下所示:

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

但是这种方法只能给我匹配第二个名字的人。如果某人没有第二个名字但他们的名字+姓氏匹配,则不会显示。我想查看姓名与姓氏或姓氏 100% 匹配的人(如果他们没有姓氏)。
先谢谢各位了

【问题讨论】:

  • 这里的人名单有没有可能是一张桌子(姓名、第二名、姓氏)?
  • 它只是在Excel列表中给我的,因此我复制并粘贴在上面的表格中。但如果需要,我可以尝试将其转换为此任务的表格
  • 对于“通常不是 SQL 人员”的人,您似乎对使用 nolock 很有信心,希望您不要介意错误的结果。是否有任何理由您仍在使用过时版本的 SQL Server?

标签: sql sql-server-2008


【解决方案1】:

提供的人员列表是一张表格

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)

【讨论】:

  • 感谢您的帮助!我很感激
【解决方案2】:

让我们看一些行:

Name SecondName Surname Remark Your concatenation
'John' 'Thomas' 'Smith' Person with middle name 'John Thomas Smith'
'John' '' 'Smith' Person that has no middle name 'John  Smith'
'John' null 'Smith' Person with an unknown middle name null

找不到没有中间名的人,因为您创建的字符串中的名字和姓氏有两个空格。找不到中间名的人,因为连接的字符串为空。

您可以使用CASE WHEN 来检查并做出相应的反应:

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)

【讨论】:

  • 谢谢!我不知道有 SQL 场景的情况。我真的很感激
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 2011-09-08
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多