在postgres中分割人名最简单的方法?

时间:2015-09-09 20:16:31

标签: sql string postgresql

考虑一个包含完整人名的表:

create table names (full_name varchar not null);   
insert into names (full_name) 
  values ('Jane Marie Doe'), ('John Doe');

在postgres中,将名称拆分为第一个和最后一个的最简单(最可读)方法是什么?

 first_name | last_name 
------------+-----------
 Jane Marie | Doe
 John       | Doe
(2 rows)

这就是我想出来的,但看起来真的很复杂。当然有一种更简单的方法吗?

select 
  array_to_string(ary[1:len - 1], ' ') as first_name, 
  ary[len] as last_name 
from (
  select ary, array_length(ary, 1) as len
  from (
    select regexp_split_to_array(full_name, E'\\s+') as ary 
    from names
  ) sub1
) sub2;

1 个答案:

答案 0 :(得分:3)

你可以尝试

SELECT regexp_split_to_array(full_name, E'\\s\\S+') as ary

相反,因为它应该始终在最后一个空格上分开。然后你知道只有两个ary

的成员

编辑: 经过进一步思考,我认为最好的方法可能是使用

SELECT regexp_replace(full_name,'\s\S+','') as first_name
SELECT regexp_replace(full_name,'.+[\s]','') as last_name