在PostgreSQL中超过23:59:59的时间?

时间:2011-08-03 16:48:50

标签: mysql postgresql time

在MySQL中,我可以创建一个带有时间字段的表,该值可以高达838:59:59(839小时-1秒)。我刚看到在PostgreSQL中,小时字段不能超过23:00:00(24小时)。有没有解决的办法?我正在尝试创建一个简单的数据库来跟踪多少小时和数小时分钟花在做某事上,所以它需要超过23小时&几分钟。我可以在MySQL中这样做,但我需要使用PostgreSQL。我用Google搜索,但没找到我要找的东西,所以我希望我没有使用正确的关键字。

4 个答案:

答案 0 :(得分:6)

Postgres没有“小时字段” - 它有一些date/time types可以满足不同的需求。我认为最符合您需求的类型是INTERVAL

答案 1 :(得分:3)

虽然它们使用相同的表示法,但是时间和经过时间之间存在差异。它们的一些值重叠,但它们是不同的域。如果您正在谈论一天中的某个时段,则838不是一小时的有效值。如果你在谈论经过的时间,838 一小时的有效值。

这种区别导致两种不同的数据类型:timestamp and interval

create table intervals (
  ts timestamp primary key,
  ti interval not null
);

insert into intervals values (current_timestamp, '145:23:12');

select *
from intervals;

2011-08-03 21:51:16.837    145:23:12

select extract(hour from ti)
from intervals

145

答案 2 :(得分:0)

我相信你是对的,但解决这个问题应该不是问题。建议存储UNIX时间整数,以便在“打入”和再次输出时,然后将delta添加到int字段。

这将产生花费的秒数,可以简单地翻译成小时:分钟:秒格式。

可以通过从结束时间戳中减去开始时间戳来计算增量(差异)。

答案 3 :(得分:0)

您可以使用日期时间字段... 839小时是34.9天的订单......