22,209
社区成员
发帖
与我相关
我的任务
分享
create table tb(ID int,ShipName nvarchar(20))
insert into tb select 1,'Joel Earl Johnson'
insert into tb select 2,'doijadf ijoadso jii'
insert into tb select 3,'faweu fasad'
insert into tb select 4,'fawe'
go
;with cte as(
select id,1 as flg,convert(nvarchar(20),left(ShipName,charindex(' ',ShipName+' ')-1))ShipName,convert(nvarchar(20),right(ShipName+' ',len(ShipName)-charindex(' ',ShipName+' ')+1))RShipName from tb
union all
select id,flg+1 as flg,convert(nvarchar(20),left(RShipName,charindex(' ',RShipName)-1))ShipName,convert(nvarchar(20),right(RShipName,len(RShipName)-charindex(' ',RShipName)+1))RShipName from cte where len(RShipName)>1
)
select a.id,a.ShipName as firstname,isnull(b.shipname,'') as middlename,isnull(c.shipname,'') as lastname from cte a left join cte b on a.id=b.id and a.flg=b.flg-1 left join cte c on b.id=c.id and b.flg=c.flg-1
where a.flg=(case when c.flg is not null then c.flg-2 else a.flg end) and a.flg=1
go
drop table tb
/*
id firstname middlename lastname
----------- -------------------- -------------------- --------------------
1 Joel Earl Johnson
2 doijadf ijoadso jii
3 faweu fasad
4 fawe
(4 行受影响)
*/
create table tb(ID int,ShipName nvarchar(20))
insert into tb select 1,'Joel Earl Johnson'
go
;with cte as(
select id,convert(nvarchar(20),left(ShipName,charindex(' ',ShipName+' ')-1))ShipName,convert(nvarchar(20),right(ShipName+' ',len(ShipName)-charindex(' ',ShipName+' ')+1))RShipName from tb
union all
select id,convert(nvarchar(20),left(RShipName,charindex(' ',RShipName)-1))ShipName,convert(nvarchar(20),right(RShipName,len(RShipName)-charindex(' ',RShipName)+1))RShipName from cte where len(RShipName)>1
)select id,ShipName from cte order by id
go
drop table tb
/*
id ShipName
----------- --------------------
1 Joel
1 Earl
1 Johnson
(3 行受影响)
*/
create table tb
(
name varchar(100)
)
insert into tb
select 'Joel Earl Johnson'
select left(name, charindex(' ',name) - 1) firstname,
substring(name , charindex(' ',name) + 1 , charindex(' ',name , charindex(' ',name) + 1) - charindex(' ',name) ) middlename,
substring(name , charindex(' ',name , charindex(' ',name) + 1) + 1,len(name)) lastname
from tb
drop table tb
/*
firstname middlename lastname
---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
Joel Earl Johnson
(所影响的行数为 1 行)
*/
create table tb
(
name varchar(100)
)
insert into tb
select 'Joel Earl Johnson'
select parsename(replace(name,' ','.'),3) firstname
,parsename(replace(name,' ','.'),2) middlename
,parsename(replace(name,' ','.'),1) lastname
from tb
/*
----------------------
firstname middlename lastname
Joel Earl Johnson
*/