sql - 在 postgres 中拆分人名的最简单方法?

标签 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;

最佳答案

你可以试试

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

关于sql - 在 postgres 中拆分人名的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32488398/

相关文章:

php - 从 Mysql 迁移到 Postgresql Yii2 查询

python - 如何在 Django 中获得按相关模型分组的最高值模型?

php - 将 DateTime 类转换为字符串

javascript - JavaScript 的通用字符串选择器?

string - 在字符串的每个字符之间添加下划线

sql - 如何保证一张表恰好只有一行一列?

mysql - SQL-如何将一个值从一个表插入另一个表,但另一表中的数据应保持不变

mysql - 查询对我来说不可能?

MySQL SELECT DISTINCT ORDER BY问题

python - Postgres 和 SqlAlchemy 没有正确更新行