logo

Копирование данных из одной колонки в другую в SQL

Быстрый ответ

Чтобы скопировать данные из одной колонки в другую в рамках одной таблицы, выполните следующую команду UPDATE:

SQL
Скопировать код
-- Спецоперация по перевоплощению данных в полном разгаре!
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника;

Следует заменить ИмяТаблицы на имя вашей таблицы, ИмяКолонкиИсточника на имя колонки, данные из которой вы хотите скопировать, а ИмяКолонкиНазначения заменить на имя колонки, в которую копировать данные. Эта операция выполнит копирование данных из одной колонки в другую для каждой строки таблицы.

Особенности типов данных

Обновление данных должно проходить без трудностей, однако при несоответствии типов данных могут возникнуть проблемы. В PostgreSQL их можно решить, приводя типы данных, например, ::TIMESTAMP или ::INTEGER.

SQL
Скопировать код
-- Адаптируем данные для перехода в новую колонку
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника::INTEGER;

Если же вам нужно перенести данные в колонку типа character varying, то работа с этим типом данных позволит избежать сложностей с приведением типов, так как данная колонка может принимать значения различных типов.

Условное копирование с использованием предложения WHERE

Если желание обновить не все записи, а только конкретные, то воспользуйтесь WHERE для указания соответствующих условий обновления:

SQL
Скопировать код
-- Мы обновляем не всё и сразу, а выборочно
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника
WHERE ОпределенноеУсловие;

Безопасное обновление данных

В ряде случаев SQL-системы могут налагать ограничения, требуя наличия предложения WHERE при обновлении. В таком случае можно обойти систему, предоставив условие, которое будет отвечать требованиям безопасности:

SQL
Скопировать код
-- Всё под контролем, безопасность гарантирована!
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника
WHERE КолонкаПервичногоКлюча IS NOT NULL;

Визуализация

Визуализируем процесс копирования данных:

Прежде обновления:

IDИсходнаяКолонкаНоваяКолонка
1ВажныеДанные
2Мудрость

Запускаем процесс копирования:

SQL
Скопировать код
-- Как говорил Йода: всегда рядом ученик и мастер
UPDATE ИмяТаблицы
SET НоваяКолонка = ИсходнаяКолонка;

После обновления:

IDИсходнаяКолонкаНоваяКолонка
1ВажныеДанныеВажныеДанные
2МудростьМудрость

Так, с помощью SQL магии, данные дублированы, и пустая колонка получила свое значение!

Обработка исключений

Обработка NULL и значений по умолчанию

NULL значения могут неожиданно появиться в данных. Чтобы преобразовать их в обычные значения, используйте COALESCE. Это позволит задать значение по умолчанию для таких случаев:

SQL
Скопировать код
-- Внезапных "подарков" в виде NULL не будет
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = COALESCE(ИмяКолонкиИсточника, 'DefaultValue');

Работа со сложными данными

Если обновление зависит от нескольких колонок или требует сложных вычислений, можно использовать подзапросы и операции соединения строк:

SQL
Скопировать код
-- Поднимаем уровень сложности!
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = (SELECT СложноеВычисление FROM … WHERE …);
-- или...
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = КолонкаОдин || ' ' || КолонкаДве;

Работа с большими наборами данных

Работа с крупными таблицами может быть сложной задачей. Чтобы ее упростить, можно обновлять данные по частям, таким образом уменьшая нагрузку на систему:

SQL
Скопировать код
BEGIN;
-- Плавно и уверенно к победе
UPDATE ИмяТаблицы
SET ИмяКолонкиНазначения = ИмяКолонкиИсточника
WHERE id BETWEEN 1 AND 50000;
COMMIT;

Продолжайте процесс с разными диапазонами, пока таблица полностью не обновится!

Полезные материалы

  1. SQL UPDATE Statement – Подробное руководство о операторе UPDATE от W3Schools.
  2. PostgreSQL: Documentation: 9.5: UPDATE – Официальное руководство по использованию команды UPDATE в PostgreSQL.
  3. Copying Data from One Column to Another in SQL Server – Дискуссия на Stack Overflow о копировании данных между колонками в SQL Server.
  4. Oracle Update Statement Tips – Советы и рекомендации по работе с командой UPDATE в Oracle.