如何在同一个表中将数据从一列复制到另一列?

Posted

技术标签:

【中文标题】如何在同一个表中将数据从一列复制到另一列?【英文标题】:How can I copy data from one column to another in the same table? 【发布时间】:2011-09-12 14:37:17 【问题描述】:

是否可以将 SQL 表中所有记录的数据从 A 列复制到 B 列?

【问题讨论】:

【参考方案1】:

这个怎么样

UPDATE table SET columnB = columnA;

这将更新每一行。

【讨论】:

如果您想将旧值转移到其他列并更新第一个列,这也将起作用:UPDATE table SET columnA = 'new value', columnB = columnA。就像其他答案所说 - 不要忘记 WHERE 子句只更新需要的内容。 当答案如此简单时,我想在一些复杂的过程中对每条记录进行循环 这显示了声明性语言的力量!我们大多数人都非常熟悉命令式编程语言,以至于忘记了简单性。【参考方案2】:
UPDATE table_name SET
    destination_column_name=orig_column_name
WHERE condition_if_necessary

【讨论】:

@Mark,这实际上是有道理的,为什么这被否决了?我有一种情况,我需要将日期值从一列复制到其他列,它只适用于某些列,而不是全部。因此,有必要在语句中添加 WHERE。 @finnTheHuman 问题询问如何“从所有记录中复制数据”,较早的答案正确回答,所以这不会添加任何内容 @Mark “这与旧接受的答案有何不同”,它有一个 WHERE 子句。 “所以这不会增加任何东西”,我不同意,它增加了一些东西。如果需要,最好包含 WHERE 子句。我们应该对否决答案负责。讨厌的人会讨厌 就我而言,我添加了 last_seen 列。 UPDATE user SET last_seen = first_seen WHERE last_seen IS NULL ...但我需要一个子句将其限制为 100 条记录/秒【参考方案3】:

如果未启用安全模式,这将更新该列中的所有行。

UPDATE table SET columnB = columnA;

如果启用了安全模式,那么您将需要使用 where 子句。 我使用大于0的主键基本上都会更新

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

【讨论】:

【参考方案4】:

PostgresSQL中如果要将一列复制到另一个数据类型不同的列,必须先转换/转换为数据类型,否则会返回

查询 1 错误:错误:列“test_date”是时间戳类型,没有 时区,但表达式的类型字符不同第 1 行:更新 表名设置 test_date = date_string_col ^ 提示:您需要重写或转换表达式。

varchar 转时间戳示例:

update table_name set timestamp_col = date_string_col::TIMESTAMP;

varchar 转 int 的例子:

update table_name set int_column = string_col::INTEGER;

但是任何列类型(除了文件或类似的)都可以复制到字符串(character varying)而不强制转换类型。

【讨论】:

以上是关于如何在同一个表中将数据从一列复制到另一列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenOffice 中将一列单元格从一张表插入到另一张表的单个单元格中?

转换后将数据从一列复制到同一表中的另一列

如何将值从一列映射到另一列数据框? [复制]

Pandas 根据非恒定值的第三列将值从一列复制到另一列

SQL - 将数据从同一表中的一列复制到另一列

如果满足条件,熊猫将值从一列复制到另一列