首页 > 解决方案 > 将个人姓名分成不同的列

问题描述

我有一张名为#MyNames 的表。该表在一列中包含人的全名(姓名空间姓氏)。在这一列中,我们可以用空格将姓名与姓氏区分开来。从左侧我们有名字,在空格之后我们有姓氏。下面你可以看到表格:

在此处输入图像描述

所以我的意图是将这个名为 MyFullName 的列分成两个单独的列,分别称为 ,,FirstName" 和 ,,LastName''。为了做到这一点,我尝试使用以下代码:

SELECT LEFT(MyFullName,charindex(' ', MyFullName) - 1) AS FirstName, RIGHT(MyFullName,charindex(' ', MyFullName)-1 )  AS LastName
from #MyNames

此代码的输出不好,我的结果如下表:

在此处输入图像描述

那么任何人都可以帮助我如何修复此代码并正确获得结果并在一列中有第一个名字,在另一列中有第二个名字吗?

标签: sql-serversubstring

解决方案


显然,姓氏条款无法正常工作。

而不是使用RIGHT(MyFullName,charindex(' ', MyFullName)-1 )考虑SUBSTRING(MyFullName,charindex(' ', MyFullName) + 1, 100)(或任何字段长度)。

更好的方法(虽然不太容易阅读 imo)是用空白 '' 字符替换名字组件。 STUFF(MyFullName,1,charindex(' ', MyFullName),'')

这些都应该工作

SELECT LEFT(MyFullName,charindex(' ', MyFullName)-1) AS FirstName,
       SUBSTRING(MyFullName,charindex(' ', MyFullName)+1, 100) AS LastName
from #MyNames

SELECT LEFT(MyFullName,charindex(' ', MyFullName)-1) AS FirstName,
       STUFF(MyFullName,1,charindex(' ', MyFullName),'') AS LastName
from #MyNames

推荐阅读