繁体   English   中英

SQL中的“溢出名称”字段分为“名字”和“姓氏”

[英]Spilt Name field in SQL into First Name and Last Name

我有一列名为name的列,该列存储整个名称。 我想在Select语句中将其分为名字和姓氏。 问题在于名称的存储方式可能像:Mike Joe或Mike&Sarah Smith。 如果只有两个名字(名字和姓氏),我可以使用以下代码:

, substring(name, CHARINDEX(' ', name)+1, len(name)-(CHARINDEX(' ', name)-1)) as [LastName]
, left(name, CHARINDEX(' ', name)) as [FirstName]

但是,如果名称是“ Mike&Sarah Smith”,我希望它像是:名字:Mike&Sarah姓氏:Smith

如何修改上面的代码以处理两种情况?

您可以通过使用CHARINDEX()REVERSE()来查找名称中的最后一个空格来实现:

SELECT RIGHT(name,CHARINDEX(' ',REVERSE(name))-1) AS LastName
      ,LEFT(@name,LEN(name) - CHARINDEX(' ',REVERSE(name))-1) AS FirstName

没有空格的名称会带来问题,因此您可能需要在上面添加一个CASE表达式以确保它们具有空格。

如果最后一部分是总是最后一个名字 ,那么你可以使用reverse与功能rightleft功能:

select 
left('Mike & Sarah Smith',
      len('Mike & Sarah Smith')-charindex(' ',reverse('Mike & Sarah Smith'))) FirstName,
right('Mike & Sarah Smith',charindex(' ',reverse('Mike & Sarah Smith')))  LastName

输出:

FirstName        LastName
Mike & Sarah     Smith

只需在查询中使用字段名称而不是代码'Mike & Sarah Smith'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM