#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
) без приведения типа.