Sql 如何从postgres获取Unix时代的时间戳?

Sql 如何从postgres获取Unix时代的时间戳?,sql,postgresql,epoch,Sql,Postgresql,Epoch,我想从博士后那里得到数据。类型timestamp中有一列没有时区。Simple SELECT返回格式化的日期,但我只需要以毫秒为单位的时间戳。如何在SQL中实现这一点 select extract(epoch from my_timestamp) 这将以秒为单位返回时间。但是,它是一个小数,小数点后有秒的分数。请阅读下面有关精度的更多信息 对于毫秒,请使用: select extract(epoch from my_timestamp)*1000 测试: 精度注意事项 extract返回一个

我想从博士后那里得到数据。类型timestamp中有一列没有时区。Simple SELECT返回格式化的日期,但我只需要以毫秒为单位的时间戳。如何在SQL中实现这一点

select extract(epoch from my_timestamp)
这将以秒为单位返回时间。但是,它是一个小数,小数点后有秒的分数。请阅读下面有关精度的更多信息

对于毫秒,请使用:

select extract(epoch from my_timestamp)*1000
测试:

精度注意事项

extract
返回一个“双精度”数字,该数字适合Postgres中的15位数字。这意味着在2016年左右(我写这篇文章时),实际精度是10微秒。注意它是如何舍入最后一位的:

select extract('epoch' from '2016-09-20T11:22:33.456789Z'::timestamp);
    date_part     
------------------
 1474370553.45679
(1 row)
对于未来270年这样的日期,这种数据类型只能表示100微秒的精度。从2016年的角度来看,这似乎是一个不错的精度,我想在我们到达那一年之前,情况可能会有所改变

select extract('epoch' from '2290-09-20T11:22:33.456789Z'::timestamp);
    date_part     
------------------
 10120936953.4568
(1 row)

无论哪种方式,它都会在一段时间内保持毫秒精度。

如果你需要毫秒,这个建议没有帮助-precision@Wiebke是的。看看更新的答案是否能更好地解释它。
select extract('epoch' from '2290-09-20T11:22:33.456789Z'::timestamp);
    date_part     
------------------
 10120936953.4568
(1 row)