所有,我有一个不平凡的任务。由于数据库结构更改,我需要将位于一个字段中的全名拆分usr_name
为 3 个字段usr_firstname,usr_middlename, usr_middlename
。
到目前为止看起来很容易,我可以做这样的事情:
update app_user
set usr_firstname = SPLIT_PART(usr_name, ' ',1),
usr_middlename = SPLIT_PART(usr_name, ' ',2),
usr_middlename = regexp_replace(usr_name, '^.* ', '') ;
然而,诀窍在于数据质量:(
有时全名没有中间名(例如Vasya Pupkin
),而有时它有中间名(Vasya Vasyavich Pupkin
)。
我可以轻松地在字符串中获取 1 个名称和字符串中的最后一个单词,但是如何检索中间(如果存在)或忽略它(如果不存在)?
谢谢 :)
我正在使用 Postgres 9.6
更新:表和数据的示例
create temporary table app_user
(
usr_name text ,
usr_firstname text,
usr_middlename text,
usr_lastname text
);
insert into app_user
select 'Adam Chwesik ', null, null, null union all
select 'Vasya Pupkin', null, null, null union all
select 'Vasya Vasyavich Pupkin', null, null, null union all
select 'Aladdin Ali Ababwa', null, null, null ;
select * from app_user;