[英]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
与功能right
和left
功能:
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.