如何解析sql字符串的名字lname,fname middleinitial



我正在尝试转换名称列从:-

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

为三列:

FName
-------------
Charlie
MiddleInitial
-------------
S
LName
-----------
Brown

我有以下代码:

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

正确传递中间的首字母和姓氏,但只返回姓氏的第一个字母。

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

我的列表有数千个名字,但是每行的格式都和上面一样。

不知道这是否适合你,但值得一试::

 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

最新更新