timestamp without time zone default now()
的“创建”列。如果我选择列,则默认情况下它具有很好的可读格式:
>
但是我想仅以毫秒为单位获取时间戳(以Long为单位)。这样的事情:
从mytable中选择myformat(创建的);
对杰克的回应:
我确实得到了与您相同的区别(-3600),但是如果我使用
timestamp with time zone
,我可以看到“错误”或差异是因为'1970-01-01'获得时区+01
。SELECT created FROM mytable;
created
---------------------------
2011-05-17 10:40:28.876944
差异是否是错误?我现在可能是因为“夏令时”吗?
在使用
to_timestamp()
插入时间戳0和1时也很有趣。 created
-----------------
2432432343876944
#1 楼
使用EXTRACT
和UNIX-Timestamp SELECT EXTRACT(EPOCH FROM TIMESTAMP '2011-05-17 10:40:28.876944') * 1000;
将给出
1305621628876.94
>将其乘以
1000
,将其转换为毫秒。然后,您可以将其转换为所需的任何内容(十进制是个不错的选择)。不要忘记记住时区。 JackPDouglas在回答中有这样的例子。以下是他的回答的摘录(created
是带有时间戳的列),说明了如何使用时区:SELECT EXTRACT(EPOCH FROM created AT TIME ZONE 'UTC') FROM my_table;
#2 楼
--EDIT--我发现这基本上是错误的。请参阅如何从PostgreSQL获取当前的unix时间戳?引起我困惑的原因...
-结束编辑-
将其发布为答案,因为它不能用作注释。
测试台:
create role stack;
grant stack to dba;
create schema authorization stack;
set role stack;
create table my_table(created timestamp);
insert into my_table(created) values(now()),('1970-01-01');
\d my_table
Table "stack.my_table"
Column | Type | Modifiers
---------+-----------------------------+-----------
created | timestamp without time zone |
查询:
select created, extract(epoch from created) from my_table;
created | date_part
---------------------------+------------------
2011-05-17 13:18:48.03266 | 1305634728.03266
1970-01-01 00:00:00 | -3600
select created, extract(epoch from date_trunc('milliseconds', created))
from my_table;
created | date_part
---------------------------+------------------
2011-05-17 13:18:48.03266 | 1305634728.03266
1970-01-01 00:00:00 | -3600
select created, extract(epoch from created at time zone 'UTC') from my_table;
created | date_part
---------------------------+------------------
2011-05-17 13:18:48.03266 | 1305638328.03266
1970-01-01 00:00:00 | 0
第三个查询中的
date_part
是:1305638328.03266 -3600种不同。#3 楼
我知道这是一篇过时的文章,但是看到我现在有同样的问题,并且正在引用类似本文的内容,也许我的回答对其他人可能很有价值:您正在查询的时间戳::: timestamptz(3)
这将过滤精度,仅检索/匹配毫秒->
例如,我在JS中的SQL解决方案现在可以正常工作,如下所示:
`SELECT * FROM public.reports WHERE id::timestamptz(3) = '${dateRequested}';`