1

我在其中有一列FullNamecontainsg FirstName, MiddleName, LastName
例如:

全名:玛丽莲·基恩·柯克兰

我想要 3 个单独的列FirstNameMiddleNameLastName从中FullName获取一个子字符串。

我正在FirstName使用代码拉动:

substring(c.LegalName, 1, CHARINDEX(' ', c.LegalName)) as 'First Name'

我想知道如何只提取第一个空格之后和第二个空格之前的中间名?
另外,我想提取第二个空格之后的姓氏?

4

2 回答 2

1

SQL Server 没有很好的字符串操作函数。使用子查询更容易:

select firstname,
       stuff(reverse(stuff(reverse(legalname), 1, len(lastname) + 1, '')),
             1, len(firstname) + 1, '')
from (select legalname,
             left(legalname, charindex(' ', legalname) - 1) as firstname,
             right(legalname, charindex(' ', reverse(legalname)) - 1) as lastname
      . . .
     ) c

但是,我会非常小心,因为并非所有人都有三部分名称。还有一些有后缀(JR、SR)等并发症。

于 2015-04-01T19:49:20.533 回答
0

你可以尝试这样的事情。

;WITH c AS 
(
    SELECT 'Marilyn Kean Kirkland' AS legalname
    UNION ALL SELECT 'J Smith' AS legalname
)
SELECT
    SUBSTRING(legalname,1,space1) firstname,
    SUBSTRING(legalname,space1,space2 - space1 + 1) middlename,
    SUBSTRING(legalname,space2 + 1,totallength - space2) lastname
FROM
(
    SELECT
        legalname,
        CHARINDEX(' ',legalname) space1,
        LEN(legalname) - CHARINDEX(' ',REVERSE(legalname)) space2,
        LEN(legalname) as totallength
    FROM c
)c
GO

正如上面其他用户所指出的,这些脚本将适用于只有 3 个部分或 2 个部分名称的用户。

于 2015-04-02T05:33:38.317 回答