0

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

我想过使用 Left() 函数和 Nest Charindex() 来查找第一组字符串。我试图找出收集名称的其余部分并将其放在自己的列中。

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

From Person.StateProvince

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

4

2 回答 2

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
于 2019-06-18T03:50:14.033 回答
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;
于 2019-06-18T03:40:12.537 回答