У меня есть столбец в базе данных PostgreSQL, и я хотел бы выполнить миграцию Flyway, чтобы разделить полное имя на first_name и last_name, основываясь на первом появлении пробела. В некоторых рядах румяна есть только одно слово или несколько. E.g.:
| fullname |
| ---------------- |
| Admin |
| Jon Doe |
| Vincent Van Gogh |
и я хочу перенести полное имя столбца в:
| first_name | last_name |
| -----------|---------- |
| Admin | |
| John | Doe |
| Vincent | Van Gogh |
Неверное решение:
Я пробовал несколько регулярных выражений, чтобы найти правильное регулярное выражение для разделения строки при первом появлении пробела. К сожалению, все были неудачными. Кто-нибудь может помочь мне найти правильное регулярное выражение для разбиения строки при первом появлении пробела? Или, может быть, есть лучший способ использовать другой метод PostgreSQL, чем regexp_split_to_array ()?
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 элементами, а к last_name добавляется только 2-й элемент в случае Винсента Ван Гога.
| first_name | last_name |
| -----------|---------- |
| Admin | |
| John | Doe |
| Vincent | Van | <- Missing Gogh surname