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

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

【问题讨论】:

    标签: sql


    【解决方案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)而不强制转换类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        • 2015-01-28
        • 1970-01-01
        • 2021-11-28
        相关资源
        最近更新 更多