我有一个名为全名的专栏。我想将它们分成两列,名字和姓氏。
我和一个有两个名字的人有困难。如果名字遇到空格,则将其视为姓氏。
我想要这个:
Full name : John Michael Smith
Firstname: John Michael
Lastname: Smith
然而,我得到了:
Firstname: John
Lastname: Michael Smith
答案 0 :(得分:0)
尝试:
declare @n varchar(max) = 'John Michael Smith'
select REVERSE(SUBSTRING(REVERSE(@n), CHARINDEX(' ', REVERSE(@n)), 100)) FirstName
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以通过检查最后一个空格的索引来拆分字符串,并将其与LEFT
和RIGHT
函数一起使用。
DECLARE @name varchar(100)= 'John Michael Smith'
SELECT LEFT(@name,LEN(@name)-CHARINDEX(' ',REVERSE(@name))) AS [Firstname],RIGHT(@name,CHARINDEX(' ',REVERSE(@name))) AS [LastName]
答案 3 :(得分:0)
- 从以下脚本创建表格
create table users(id int IDENTITY(1,1) PRIMARY KEY, name varchar(50));
- 插入记录以供查询以进行测试
insert into users(name)
values('John Abraham'),
('John Mark Abraham'),
('John Vens Abraham'),
('John Abraham');
- 运行以下查询以获取所有插入的记录。
select * from users;
- 运行以下查询以获取姓名
的名字和姓氏 select id , name, SUBSTRING(name,0, CHARINDEX(last_name,name)) as first_name, last_name from
(
select id, name, REVERSE(SUBSTRING(REVERSE(name),0,CHARINDEX(' ',REVERSE(name)))) as last_name from users
) as A
答案 4 :(得分:0)
你可以使用hi-jack' parsename'。这最多只能工作4个间隔,但这是一个不错的选择;
declare @name varchar(100)
set @name='John Michael Smith'
select PARSENAME(REPLACE(@name,' ','.'),1) -- returns Smith
select PARSENAME(REPLACE(@name,' ','.'),2) -- returns Micheal
select PARSENAME(REPLACE(@name,' ','.'),3) -- Returns John
select PARSENAME(REPLACE(@name,' ','.'),4) -- returns NULL