我的FullName
列中包含FirstName
,MiddleName
,LastName
。
例如:
FullName:Marilyn Kean Kirkland
我希望从FirstName
获取MiddleName
,LastName
和FullName
的3个单独列,方法是从中获取子字符串。
我使用代码拉<{1}}:
FirstName
我想知道我怎样才能拉出第一个空格之后和第二个空格之前的中间名? 另外,我想拉出第二个空格后面的姓氏吗?
答案 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部分名称的用户一起使用。