Sql server 将个人姓名分开列

Sql server 将个人姓名分开列,sql-server,substring,Sql Server,Substring,我有一个名为#MyNames的表。该表在一列中包含人员的全名(名称空间姓氏)。在此列中,我们可以用空格区分姓名和姓氏。从左侧我们有姓名,空格后我们有姓氏。下表为: 因此,我打算将此名为MyFullName的列划分为两个单独的列,分别称为、、FirstName“和、、LastName“”。为此,我尝试使用以下代码: SELECT LEFT(MyFullName,charindex(' ', MyFullName) - 1) AS FirstName, RIGHT(MyFullName,chari

我有一个名为#MyNames的表。该表在一列中包含人员的全名(名称空间姓氏)。在此列中,我们可以用空格区分姓名和姓氏。从左侧我们有姓名,空格后我们有姓氏。下表为:

因此,我打算将此名为MyFullName的列划分为两个单独的列,分别称为、、FirstName“和、、LastName“”。为此,我尝试使用以下代码:

SELECT LEFT(MyFullName,charindex(' ', MyFullName) - 1) AS FirstName, RIGHT(MyFullName,charindex(' ', MyFullName)-1 )  AS LastName
from #MyNames
此代码的输出不好,我的结果如下表所示:


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

显然,姓氏子句工作不正常

<> >代替使用<代码>右(MyFultNeX,CalEngress('',MyFullName)-1)< /C> >考虑<代码>子串(MyFultNeX,CalEngress('',MyFullName)+ 1, 100)< /C> >(或任意字段长度)。 一种更好的方法(尽管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

显然,姓氏子句不能正常工作

<> >代替使用<代码>右(MyFultNeX,CalEngress('',MyFullName)-1)< /C> >考虑<代码>子串(MyFultNeX,CalEngress('',MyFullName)+ 1, 100)< /C> >(或任意字段长度)。 一种更好的方法(尽管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

查询中的一个小更正应该可以解决问题

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

查询中的一个小更正应该可以解决问题

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

注意使用
LEN
来处理这些问题。我发现(根据个人经验),
LEN
忽略了尾随空格。请看这一点。当然,所有这些解决方案都容易受到未正确清理数据的影响。注意使用
LEN
来处理这些问题。我发现(根据个人经验)
LEN
忽略尾随空格。请参见此。当然,所有这些解决方案都容易受到未正确清理数据的影响。