Как я могу скопировать данные из одного столбца в другой в той же таблице?

#sql

#sql

Вопрос:

Возможно ли скопировать данные из столбца A в столбец B для всех записей в таблице в SQL?

Ответ №1:

Как насчет этого

 UPDATE table SET columnB = columnA;
  

Это обновит каждую строку.

Комментарии:

1. Это также сработает, если вы хотите перенести старое значение в другой столбец и обновить первый: UPDATE table SET columnA = 'new value', columnB = columnA . Как говорится в другом ответе — не забудьте предложение WHERE, чтобы обновлять только то, что необходимо.

2. Я думаю, что в какой-то сложной процедуре выполняется цикл для каждой записи, когда ответ такой простой

3. Это показывает мощь декларативного языка! Большинство из нас настолько знакомы с императивными языками программирования, что забывают о простоте.

Ответ №2:

 UPDATE table_name SET
    destination_column_name=orig_column_name
WHERE condition_if_necessary
  

Комментарии:

1. @Mark, это действительно имеет смысл, почему это отклонено? У меня была ситуация, когда мне нужно было скопировать значение даты из одного столбца в другие столбцы, и это применимо только к НЕКОТОРЫМ столбцам, а не ко всем. Поэтому было бы необходимо указать WHERE в инструкции.

2. @finnTheHuman В вопросе задается вопрос о том, как «скопировать данные из всех записей», на который предыдущий ответ отвечает правильно, поэтому это ничего не добавляет

3. @Отметьте «Чем это отличается от старого принятого ответа», в нем есть предложение WHERE. «итак, это ничего не добавляет», я не согласен, это что-то добавляет. при НЕОБХОДИМОСТИ полезно включить предложение WHERE. мы должны нести ответственность за ответы с понижением. ненавистники будут ненавидеть

4. В моем случае я добавил столбец last_seen. UPDATE user SET last_seen = first_seen WHERE last_seen IS NULL

5. …но мне нужно предложение в моем, которое ограничивает его 100 записями / с

Ответ №3:

Это обновит все строки в этих столбцах, если безопасный режим не включен.

UPDATE table SET columnB = columnA;

Если включен безопасный режим, то вам нужно будет использовать предложение where. Я использую первичный ключ как больший 0, в основном все будет обновлено

UPDATE table SET columnB = columnA where table.column>0;

Ответ №4:

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

ОШИБКА запроса 1: ОШИБКА: столбец «test_date» имеет тип timestamp без часового пояса, но выражение имеет тип character, изменяющийся СТРОКА 1: update table_name set test_date = date_string_col ^ ПОДСКАЗКА: Вам нужно будет переписать или привести выражение.

Пример преобразования varchar в timestamp:

 update table_name set timestamp_col = date_string_col::TIMESTAMP;
  

Пример преобразования varchar в int:

 update table_name set int_column = string_col::INTEGER;
  

но любой тип столбца (кроме file или аналогичного) может быть скопирован в string ( character varying ) без приведения типа.