您如何使用字符串函数按单个术语分隔数据

时间:2019-06-18 00:37:24

标签: sql-server ssms ssms-2017

我正在尝试将名称拆分为多个列,例如,名为“名称的列1”将在第1行中包含varChar“ Jesus Lopez”。如何将其拆分,以便可以在第1行中创建第二列以包含“耶稣”和第一行的第三列包含“洛佩兹”。我只能使用字符串函数来完成此任务。

我考虑过使用Left()函数和Nest Charindex()查找第一组字符串。我正在尝试找出其余的名称,并将其放在自己的列中。

Select Name, 
     Left(Name, Charindex(' ', Name)) as FirstName,

From Person.StateProvince

我希望总共有3列。一个具有原始名称,另一个仅具有名字,最后一个第三列,其中包含第一列中的数据。

2 个答案:

答案 0 :(得分:0)

空格有什么要求?考虑到您想忽略该值的任何前导或尾随空格,并在该值不存在时将该值设为NULL,这将起作用:

SELECT  Name
        ,FirstName = CASE WHEN CHARINDEX(' ', LTRIM(Name)) > 1 THEN LEFT(LTRIM(Name), CHARINDEX(' ', LTRIM(Name))-1) WHEN LEN(LTRIM(RTRIM(Name))) > 1 THEN LTRIM(RTRIM(Name)) ELSE NULL END
        ,Remaining = CASE WHEN CHARINDEX(' ', LTRIM(RTRIM(Name))) > 0 THEN LTRIM(SUBSTRING(LTRIM(Name),CHARINDEX(' ', LTRIM(Name))+1, LEN(LTRIM(Name)) - CHARINDEX(' ', LTRIM(Name)))) ELSE NULL END
FROM    Person.StateProvince;

答案 1 :(得分:0)

如果字符串不超过四个部分,则可以使用PARSENAME

SELECT [Name]
    ,PARSENAME(REPLACE([Name],' ','.'),4) AS Part1
    ,PARSENAME(REPLACE([Name],' ','.'),3) AS Part2
    ,PARSENAME(REPLACE([Name],' ','.'),2) AS Part3
    ,PARSENAME(REPLACE([Name],' ','.'),1) AS Part4
FROM #temp