如何在同一个表中将数据从一列复制到另一列?
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
)而不强制转换类型。
【讨论】:
以上是关于如何在同一个表中将数据从一列复制到另一列?的主要内容,如果未能解决你的问题,请参考以下文章