我正在尝试从以下位置转换名称列: -
Name
---------------------
Brown,Charlie S
分为三列:
FName
-------------
Charlie
MiddleInitial
-------------
S
LName
-----------
Brown
我有以下代码:
SUBSTRING(Name, CHARINDEX(',', Name) + 1, CHARINDEX(',', Name + ',', CHARINDEX(',', Name) + 1) - CHARINDEX(' ', Name) - 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