Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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_Sql Server_Tsql - Fatal编程技术网

Sql 检查名称是否包含多个标题

Sql 检查名称是否包含多个标题,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想建立一个查询,以确定一个名称中是否有多个标题 A科恩先生B科恩夫人 标题列表: (‘先生’、‘先生’、‘夫人’、‘小姐’、‘小姐’、‘其他’、‘女士’、‘女士’) 我可以通过以下方式查看第一个标题: IF (SUBSTRING(@Name, 0, CHARINDEX(' ', @Name)) NOT IN ('Mr', 'Mr.', 'Mrs', 'Mrs.', 'Miss', 'Miss.', 'Other', 'Ms', 'Ms.')) 但我一直在寻找第二个冠军 我可以使用

我想建立一个查询,以确定一个名称中是否有多个标题

A科恩先生B科恩夫人

标题列表:

(‘先生’、‘先生’、‘夫人’、‘小姐’、‘小姐’、‘其他’、‘女士’、‘女士’)

我可以通过以下方式查看第一个标题:

 IF (SUBSTRING(@Name, 0, CHARINDEX(' ', @Name)) NOT IN 
    ('Mr', 'Mr.', 'Mrs', 'Mrs.', 'Miss', 'Miss.', 'Other', 'Ms', 'Ms.'))
但我一直在寻找第二个冠军

我可以使用以下代码获得没有第一个标题的部分:

LTRIM(STUFF(@Name, CHARINDEX(Title, @Name), LEN(Title), ''))
这将输出为
'A Cohen Mrs B Cohen'
。从这里,我想检查这些标题是否存在于这个输出中


我知道我可以为每个标题使用多个
操作符,比如
操作符,但我正在寻找更整洁的操作符。

使用
连接和派生表:

select t.name, count(*) as num_titles
from t join
     (values ('Mr'), ('Mr.'), ('Mrs'), ('Mrs.'), ('Miss'), ('Miss.'), ('Other'), ('Ms'), ('Ms.')
     ) v(title)
     on name like '%' + v.title + '%'
group by t.name
having count(*) >= 2;
请注意,这必然会找到“先生”、“太太”、“太太”、“小姐”和“女士”的重复项,因为这些标题与相同的标题(如“先生”)有其他匹配的标题。这似乎符合您指定的条件

为了防止出现这种情况,您可能需要在标题后留一个空格。如果是,请使用:

     on name like '%' + v.title + ' %'

这不是最快的查询,但你可以将标题放在一个表变量中,使用like和group by/have count>1。史密斯先生和科恩先生是一个标题还是两个?为什么不只查找有空格的匹配项,然后是标题(即“Mr”),它只会在有第二个标题的地方返回?@johncapelletti,这是两个。我正在检查组合名称。提示:注意那些不能正确处理诸如“Missy Brother”、“Adelaide Salmissra”和“Jim Bob Strother”等名称的解决方案,尤其是与其他名称组合时。同意,我只会在没有句号的项中添加尾随空格,即('Mr')您不能在
HAVING
子句中使用别名
num\u titles
,而不是
COUNT(*)
。如果
Mr
存在两次会怎样?它应该被计数。“不能在HAVING子句中使用别名num_titles而不是COUNT()”*@Sami true这是MySQL语法,允许在HAVING子句中使用别名,这是您了解许多数据库系统后得到的结果。。“有时候你开始把事情搞混了,”雷蒙德尼兰德说,“我不知道!这条评论是Gordon编辑他的问题的便条,因为我不会编辑他的代码,这是我唯一不碰的东西。如果
Mr
存在两次或>2,仍将返回错误的结果。见John Cappelletti评论和OP的回复。@Sami mine评论更适合一般读者,因此Gordon不会因为该语法而获得不必要的否决票,因为其他人会读到你关于该查询“完全无效”的评论。。“这条评论是Gordon编辑他的问题的便条,因为我不会再编辑他的代码,这是我唯一不碰的东西”编辑那些小语法“拼写错误”很好“很确定Gordon不介意我修改它。