Как разбить столбец на два в SQL?

Есть следующая задача:

В таблице users в поле name хранятся имя и фамилия пользователя разделенные пробелами.

  1. Создайте в таблице два дополнительных поля: first_name и last_name длиной 50 символов. Оба поля по умолчанию должны содержать пустую строку.
  2. Заполните first_name именами пользователя, а last_name — фамилиями. Используйте данные из общего поля name.
  3. В конце удалите поле name.

users

id name age
1 Вероника Петрова 20
2 Светлана Иванова 17
3 Елена Абрамова 18
4 Василиса Кац 15
5 Алёна Сорокина 22
6 Алёна Федькова 28
7 Лиана Сорокин 21
8 Карина Белая 30
9 Анастасия Дейчман 16
10 Юлия Фёдорова 25

Использую следующий код:

ALTER TABLE users
ADD COLUMN first_name VARCHAR(50) NOT NULL DEFAULT '',
ADD COLUMN last_name VARCHAR(50) NOT NULL DEFAULT '';

UPDATE users
    SET first_name = LEFT (name, INSTR (' ', name));
    
UPDATE users
    SET last_name = RIGHT (name, INSTR (' ', name));
    
ALTER TABLE users
DROP COLUMN name;

Однако столбцы last_name и first_name оказываются пустыми. Если я правильно понимаю, то они лишь ссылаются на столбец name, но не записывают новые значения.

Подскажите, как сделать так, чтобы данные сохранялись в last_name и first_name после удаления name?

Заранее спасибо за помощь!


Ответы (1 шт):

Автор решения: Akina

Лучше применить SUBSTRING_INDEX():

UPDATE users
SET first_name = SUBSTRING_INDEX(name, ' ', 1),
    last_name = SUBSTRING_INDEX(name, ' ', -1);

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0d241fb985c71409ebc5a689d1a3a3ad

→ Ссылка