Как разбить столбец на два в SQL?
Есть следующая задача:
В таблице users в поле name хранятся имя и фамилия пользователя разделенные пробелами.
- Создайте в таблице два дополнительных поля: first_name и last_name длиной 50 символов. Оба поля по умолчанию должны содержать пустую строку.
- Заполните first_name именами пользователя, а last_name — фамилиями. Используйте данные из общего поля name.
- В конце удалите поле 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