我想写一个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