考虑一个包含人类全名的表:
create table names (full_name varchar not null);
insert into names (full_name)
values ('Jane Marie Doe'), ('John Doe');
在 postgres 中,什么是simplest(最易读的)将名称分为第一个和最后一个的方法?
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;
你可以尝试
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)