我必须使用postgres数据库9.4,我想使用时间戳。 第一个问题'就是当我在postgres上创建一个时间戳列时,我不知道它在内部的作用,但当我查询它时,返回' 2010-10-30 00:00:00'
对我来说,时间戳就像这样12569537329(unix timestamp)。
我说因为是整数或浮点数,计算机比较字符串更容易处理,每个国家/地区都有自己的时间格式,其中unix时间戳是一个数字和故事的结尾。< / p>
从php查询结果是一个字符串,所以我必须做一堆杂耍,因为时区,白天节省光和其他东西可能会出错。
我搜索了很多内容,无法在postgresql上找到使用unix时间戳的方法。
有人可以解释是否有办法或正确的工作方式并尽可能接近unix时间戳。
更新
有一件事我发现它会帮助我,并且需要花费很长时间才能发现postgresql可能会更改间隔输出。
在php中,月份的日期间隔是“月份”。因为pg是&#39; mon&#39;在PHP上,它会理解为星期一。
我认为,如果你不得不耍弄太多,那你做错了。
很高兴postgres让我们改变会话或永久性的行为。
因此,将intervalstyle
设置为iso_8601
,它将作为php iso_8601工作,并输出P1M
答案 0 :(得分:0)
只需将unix time_t
转换为时间戳,然后在postgres中使用它:
CREATE TABLE omg
( seq SERIAL NOT NULL PRIMARY KEY
, stampthing TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO omg(stampthing) SELECT now();
INSERT INTO omg(stampthing) VALUES
('epoch'::timestamptz )
, ('epoch'::timestamptz + 12569537329 * '1 second'::interval)
;
SELECT stampthing
, DATE_PART('epoch',stampthing) AS original
FROM omg;
输出:
CREATE TABLE
INSERT 0 1
INSERT 0 2
stampthing | original
-------------------------------+------------------
2016-01-20 16:08:12.646172+01 | 1453302492.64617
1970-01-01 01:00:00+01 | 0
2368-04-24 20:08:49+02 | 12569537329
(3 rows)
答案 1 :(得分:0)
如果您只是在postgres中查询时间戳列,您将获得格式化日期。如果您更喜欢unix时间戳整数,则可以在使用类似
的语法返回时将其强制转换select extract(epoch from '2011-11-15 00:00:00+01'::timestamp with time zone)::integer;
如果您经常这样做,您可以使用摘录进行查看。
或者您可以将时间戳列定义为整数,并使用extract()
存储数据