SQL-在单独的列中的第一个空格和第二个空格之后获取子字符串

时间:2015-04-01 19:40:12

标签: sql sql-server-2008 substring charindex

我的FullName列中包含FirstNameMiddleNameLastName
例如:

  

FullName:Marilyn Kean Kirkland

我希望从FirstName获取MiddleNameLastNameFullName的3个单独列,方法是从中获取子字符串。

我使用代码拉<{1}}:

FirstName

我想知道我怎样才能拉出第一个空格之后和第二个空格之前的中间名? 另外,我想拉出第二个空格后面的姓氏吗?

2 个答案:

答案 0 :(得分: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)和其他并发症。

答案 1 :(得分: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部分名称的用户一起使用。