如何解析sql string lname,fname middleinitial的第一个名字?

时间:2014-05-24 04:30:35

标签: sql

我正在尝试从以下位置转换名称列: -

Name
---------------------
Brown,Charlie S 

分为三列:

FName
-------------
Charlie

MiddleInitial
-------------
S

LName
-----------
Brown

我有以下代码:

SUBSTRING(Name, CHARINDEX(',', Name) + 1, CHARINDEX(',', Name + ',', CHARINDEX(',', Name) + 1) - CHARINDEX(' ', Name) - 1)

它正确地提供中间名和姓,但它只返回姓氏的第一个字母。

如何改进代码以返回姓氏的所有字母?

我的列表有数千个名称,但每行的格式与上面相同。

1 个答案:

答案 0 :(得分:0)

不知道这对你有用,但值得一试:: {/ p>

 select SUBSTRING(@Name, CHARINDEX(',', @Name) + 1, len(@Name)- CHARINDEX(',', @Name)-2)

*全功能解决方案* 考虑到一切都是动态的,即名字,中间名和姓可以是任何长度。请注意,我在多个陈述中将其分解,以便于理解。

 DECLARE @Name nvarchar(255),
        @FirstName nvarchar(255),
        @SecondName nvarchar(255),
        @MiddleName nvarchar(255),
        @WithoutSecondName nvarchar(255),
        @start int

 SELECT  @Name = 'Broooown,Charrrrlie Sroioiy', @start = CHARINDEX(',', @Name)

 SELECT @SecondName = SUBSTRING(@Name, 0,@start)
 SELECT @WithoutSecondName = SUBSTRING(@Name, @start + 1, len(@Name)- @start)
 SELECT @FirstName = SUBSTRING(@WithoutSecondName, 0 ,CHARINDEX(' ', @WithoutSecondName))

 SELECT @MiddleName = SUBSTRING(@WithoutSecondName, LEN(@FirstName)+2 ,LEN(@WithoutSecondName)-LEN(@FirstName))

 SELECT @FirstName, @MiddleName, @SecondName