SQL子串函数

时间:2017-07-10 04:47:47

标签: sql sql-server sql-server-2008

我有一个名为全名的专栏。我想将它们分成两列,名字和姓氏。

我和一个有两个名字的人有困难。如果名字遇到空格,则将其视为姓氏。

我想要这个:

Full name : John Michael Smith
Firstname: John Michael
Lastname: Smith

然而,我得到了:

Firstname: John
Lastname: Michael Smith

5 个答案:

答案 0 :(得分:0)

尝试:

declare @n varchar(max) = 'John Michael Smith'

select REVERSE(SUBSTRING(REVERSE(@n),  CHARINDEX(' ', REVERSE(@n)), 100)) FirstName

答案 1 :(得分:0)

答案 2 :(得分:0)

您可以通过检查最后一个空格的索引来拆分字符串,并将其与LEFTRIGHT函数一起使用。

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