我在PostgreSQL数据库中有一列,我希望能够进行Flyway迁移,根据第一个空格来将全名拆分成名字和姓氏。但是有些行存在问题,可能只有一个单词或多个单词。例如:
| fullname |
| ---------------- |
| Admin |
| Jon Doe |
| Vincent Van Gogh |
我希望您将fullname列迁移到:
| first_name | last_name |
| -----------|---------- |
| Admin | |
| John | Doe |
| Vincent | Van Gogh |
错误的解决方案: 我尝试了几个正则表达式来找到正确的正则表达式,以便在第一个空格出现时拆分字符串。但是,所有尝试都失败了。是否有人可以帮我找到适当的regex,以便在第一个空格出现时拆分字符串?或者使用regexp_split_to_array()之外的其他PostgreSQL方法会更好吗?
正确的解决方案: 我想在第一个空格处将字符串拆分,但是我的正则表达式尝试都失败了。请问是否有更好的方法来实现此目的?如果没有,请提供正确的正则表达式。谢谢!
UPDATE users
SET first_name = (regexp_split_to_array(users.full_name, '\s+'))[1],
last_name = (regexp_split_to_array(users.full_name, '\s+'))[2],
对于正则表达式 '\s+',数组将被创建为3个元素,并且对于文森特·梵高的情况,仅会在第二个元素中填充姓氏。
| first_name | last_name |
| -----------|---------- |
| Admin | |
| John | Doe |
| Vincent | Van | <- Missing Gogh surname