Копирование данных из одной колонки в другую в SQL
Быстрый ответ
Чтобы скопировать данные из одной колонки в другую в рамках одной таблицы, выполните следующую команду UPDATE:
-- Спецоперация по перевоплощению данных в полном разгаре!
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника;
Следует заменить ИмяТаблицы
на имя вашей таблицы, ИмяКолонкиИсточника
на имя колонки, данные из которой вы хотите скопировать, а ИмяКолонкиНазначения
заменить на имя колонки, в которую копировать данные. Эта операция выполнит копирование данных из одной колонки в другую для каждой строки таблицы.
Особенности типов данных
Обновление данных должно проходить без трудностей, однако при несоответствии типов данных могут возникнуть проблемы. В PostgreSQL их можно решить, приводя типы данных, например, ::TIMESTAMP
или ::INTEGER
.
-- Адаптируем данные для перехода в новую колонку
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника::INTEGER;
Если же вам нужно перенести данные в колонку типа character varying
, то работа с этим типом данных позволит избежать сложностей с приведением типов, так как данная колонка может принимать значения различных типов.
Условное копирование с использованием предложения WHERE
Если желание обновить не все записи, а только конкретные, то воспользуйтесь WHERE для указания соответствующих условий обновления:
-- Мы обновляем не всё и сразу, а выборочно
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника
WHERE ОпределенноеУсловие;
Безопасное обновление данных
В ряде случаев SQL-системы могут налагать ограничения, требуя наличия предложения WHERE при обновлении. В таком случае можно обойти систему, предоставив условие, которое будет отвечать требованиям безопасности:
-- Всё под контролем, безопасность гарантирована!
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника
WHERE КолонкаПервичногоКлюча IS NOT NULL;
Визуализация
Визуализируем процесс копирования данных:
Прежде обновления:
ID | ИсходнаяКолонка | НоваяКолонка |
---|---|---|
1 | ВажныеДанные | |
2 | Мудрость |
Запускаем процесс копирования:
-- Как говорил Йода: всегда рядом ученик и мастер
UPDATE ИмяТаблицы
SET НоваяКолонка = ИсходнаяКолонка;
После обновления:
ID | ИсходнаяКолонка | НоваяКолонка |
---|---|---|
1 | ВажныеДанные | ВажныеДанные |
2 | Мудрость | Мудрость |
Так, с помощью SQL магии, данные дублированы, и пустая колонка получила свое значение!
Обработка исключений
Обработка NULL и значений по умолчанию
NULL значения могут неожиданно появиться в данных. Чтобы преобразовать их в обычные значения, используйте COALESCE
. Это позволит задать значение по умолчанию для таких случаев:
-- Внезапных "подарков" в виде NULL не будет
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = COALESCE(ИмяКолонкиИсточника, 'DefaultValue');
Работа со сложными данными
Если обновление зависит от нескольких колонок или требует сложных вычислений, можно использовать подзапросы и операции соединения строк:
-- Поднимаем уровень сложности!
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = (SELECT СложноеВычисление FROM … WHERE …);
-- или...
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = КолонкаОдин || ' ' || КолонкаДве;
Работа с большими наборами данных
Работа с крупными таблицами может быть сложной задачей. Чтобы ее упростить, можно обновлять данные по частям, таким образом уменьшая нагрузку на систему:
BEGIN;
-- Плавно и уверенно к победе
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника
WHERE id BETWEEN 1 AND 50000;
COMMIT;
Продолжайте процесс с разными диапазонами, пока таблица полностью не обновится!
Полезные материалы
- SQL UPDATE Statement – Подробное руководство о операторе UPDATE от W3Schools.
- PostgreSQL: Documentation: 9.5: UPDATE – Официальное руководство по использованию команды UPDATE в PostgreSQL.
- Copying Data from One Column to Another in SQL Server – Дискуссия на Stack Overflow о копировании данных между колонками в SQL Server.
- Oracle Update Statement Tips – Советы и рекомендации по работе с командой UPDATE в Oracle.