我正在尝试转换名称列从:-
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