【发布时间】:2016-08-13 15:48:10
【问题描述】:
我在 Postgres 中有一个包含日期列和时间列的表。我想添加一个新列,该列具有基于日期和时间列的 utc(或时间戳)值。
我尝试了以下方法:
INSERT INTO mytable (utc) SELECT EXTRACT(EPOCH FROM (date || ' ' || time )::timestamp);
但我得到了错误:
ERROR: column "date" does not exist
SQL state: 42703
Hint: There is a column named "date" in table "mytable", but it cannot be referenced from this part of the query.
而且肯定有日期和时间列。
有谁知道如何根据日期和时间列向 UTC 列添加值?
例如:09/21/2012 12:56:00 应该变成类似 411730.830555
我正在尝试做类似于this question 的事情(我认为)。
【问题讨论】:
-
insert可以插入新的行。使用alter table add column添加新列。但总的来说,存储可以轻松(且廉价地)从已经存在的数据中派生的数据是一个坏主意。创建包含该列的视图,无需重复信息。为什么要将日期和时间存储在两列中?为什么不使用单个timestamp列? -
这正是我想要做的。我无法为每一行手动创建 UTC 日期时间值。但是我碰巧有一个已经创建的具有日期和时间值的表。要使用单个 UTC 列,我需要能够根据现有值创建这些值。
-
此外,根据具体情况,使用多个列来解释数据的不同部分或以不同的方式读取会很有帮助。在此示例中,看到 411730.830555 之类的 UTC 日期对人类来说可能毫无意义,但它是功能所必需的,因此最好同时拥有日期和时间列。
-
不,冗余存储数据没有“有用”。如果您需要以不同格式显示时间戳列,请创建一个执行此操作的视图。不要多次存储相同的信息。
-
我仍然不清楚您要做什么。
alter表有一个新的timestamp列?extract(epoch...)确实不返回时间戳值,它返回一个整数值。timestamp完全不同:postgresql.org/docs/current/static/datatype-datetime.html
标签: sql postgresql utc