如何在PostgreSQL中迁移姓名列到姓和名



我想写一个SQL迁移来拆分一个"name"列到"first_name";还有"姓氏"one_answers";"users">

我正在寻找一个命令,看起来像

UPDATE users
SET (first_name, last_name)
VALUES ({expression for first name}, {expression for last name});

我接受这两部分之间的边界是第一个空白字符的假设。(例如,对于John Doe Jr,姓氏应该是'Doe Jr')

我试图使用regexp_match(name, [^s]*)的名字,但对于name="John Doe"它返回first_name="{John}",我怎么能解决这个问题,或者有一个比使用regexp_match更好的方法?

UPDATE users SET first_name = (regexp_split_to_array(name, E's+'))[1], last_name = (regexp_split_to_array(name, E's+'))[2]

表示包含两个及以上姓氏的名字

update users set firstname = (regexp_split_to_array(name, E'\s+'))[1], 
lastname = array_to_string((regexp_split_to_array(name, E'\s+'))[2:], ' ')

我设法使用(regexp_match(name, '[^s]*'))[1]做到这一点,但我不确定它是否是最惯用的SQL

最新更新