这一种可能性......
DECLARE @t TABLE(
Name varchar(200)
)
INSERT INTO @t VALUES
('Pablo Diego José Francisco')
,('Juan Nepomuceno María de los Remedios')
,('Daniel Mayes Matthew da Kitching')
,('Ben Wignall Elizabeth de Hann')
,('Emma Simpson Liam Wales Jacob');
WITH cte AS(
SELECT Name, REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(t.Name)),' de ', ' '), ' da ', ' '), ' los ', ' ') NameShort, REVERSE(REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(t.Name)),' de ', ' '), ' da ', ' '), ' los ', ' ')) NameShortRev
FROM @t t
)
SELECT c.Name, c.NameShort
,LEFT(c.NameShort, CHARINDEX(' ', c.NameShort)) FirstName
,SUBSTRING(c.NameShort, CHARINDEX(' ', c.NameShort) + 1, LEN(c.NameShort) - CHARINDEX(' ', c.NameShortRev) - CHARINDEX(' ', c.NameShort)) MiddleName
,REVERSE(LEFT(c.NameShortRev, CHARINDEX(' ', c.NameShortRev))) LastName
FROM cte c
结果:
Name NameShort FirstName MiddleName LastName
Pablo Diego José Francisco Pablo Diego José Francisco Pablo Diego José Francisco
Juan Nepomuceno María de los Remedios Juan Nepomuceno María Remedios Juan Nepomuceno María Remedios
Daniel Mayes Matthew da Kitching Daniel Mayes Matthew Kitching Daniel Mayes Matthew Kitching
Ben Wignall Elizabeth de Hann Ben Wignall Elizabeth Hann Ben Wignall Elizabeth Hann
Emma Simpson Liam Wales Jacob Emma Simpson Liam Wales Jacob Emma Simpson Liam Wales Jacob
首先你^ h大街确定准确的标准,你不想作为一个名字,那么你可以想出如何去做 –