繁体   English   中英

SQL:从日期和时间向表中添加UTC时间戳列

[英]SQL: Add UTC timestamp column to table from date and time

我在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

我正在尝试做类似这个问题的事情(我想)。

你想做什么

添加列,您需要一个alter table语句:

alter table mytable add column utc float;

然后,您需要使用新数据更新该列:

update mytable
  set utc = EXTRACT(EPOCH FROM (date || ' ' || time )::timestamp);

您现在需要一个触发器来保持日期/时间和utc列同步。

你应该做什么

以上不是一个好主意。 关系数据库中的经验法则:

永远不要存储可以从数据库中已有的数据派生的信息。

因此,干净的解决方案是不将日期和时间存储在两个不同的列中,而不是在不同的表示中添加包含完全相同信息的另一列。

您应该有一个类型为timestamp列,然后创建一个视图,返回具有您想要的不同格式的timestamp

-- add the new timestamp column
alter table mytable add column ts_column timestamp;

-- copy the data 
update mytable
  set ts_column = (date || ' ' || time )::timestamp;

-- get rid of the old columns
alter table mytable 
     drop column date, 
     drop column time;

-- now create a view that display the information in different ways              
create view formatted_mytable
as
select id, 
       ts_column, 
       to_char(ts_column, 'yyyy-mm-dd') as date_only, 
       to_char(ts_column, 'hh24:mi:ss') as time_only, 
       extract(epoch from ts_column) as epoch
from my_table;

这样,您就不需要复制表中存储的信息,因为您需要不同的显示格式。

在进一步调查后,其他答案的格式实际上与我想要的不同。

我提到所需的格式是ddddd.tttttt ,其中d是日期的数字版本(具体地说,是自1900-01-00以来的天数), t是24小时的分数。 这是Excel用于存储日期时间值的格式,称为“序列日期时间”。 有关更多信息,请参阅Excel中的日期和时间。

我认为这与postgresql的时间戳格式类似,但结果证明不适用于我的目的。

这是有效的:

UPDATE mytable SET utc = DATE_PART('day', '2012-09-21'::timestamp - '1899-12-30'::timestamp) + (EXTRACT( HOURS FROM time::time)/24) + (EXTRACT( MINUTES FROM time::time)/1440) + (EXTRACT( SECONDS FROM time::time)/86400);

只是想更新答案的准确性,以防其他人遇到这个问题。 似乎关于如何在互联网上执行此操作的信息很少。 我很感激@a_horse_with_no_name的回答; 这确实在某些方面帮助了我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM