Как разделить строку при первом появлении пробела в PostgreSQL - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть столбец в базе данных 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

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать substring:

UPDATE users
    SET first_name = substring(users.full_name, '^\S+'),
        last_name = substring(users.full_name, '^\S+\s+(.*)'),

Шаблон ^\S+ соответствует 1 или более непробельным символам в начале строки.

Шаблон ^\S+\s+(.*) соответствует строке, которая начинается с 1+ непробельных символов в начале, затем имеет 1+ пробельных символов, а затем захватывает в Группу 1 любое количество 0+ символов. Часть в скобках, шаблон группы захвата, это то, что substring вернет.

Но если шаблон содержит какие-либо круглые скобки, возвращается часть текста, которая соответствует первому подвыражению в скобках (та, чья левая скобка стоит первой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...