在 Postgres 中,我试图创建一个精度为微秒的时间戳字段。
如果我以可打印格式查询时间戳,它会显示精确到微秒的日期,但如果我查询纪元,它只会显示 5 位数字......
示例:
CREATE TABLE date_test (datetime timestamp(6) WITH TIME ZONE);
INSERT INTO date_test VALUES(TO_TIMESTAMP(1525745241.879112));
SELECT datetime FROM date_test; //returns 2018-05-08 12:07:21.879112+10
SELECT EXTRACT(epoch FROM datetime) from date_test; //returns 1525745241.87911
Run Code Online (Sandbox Code Playgroud)
最后一位数字丢失的原因是什么?查询是否本质上转换为浮点并失去准确性?有没有什么简单的方法可以在 Postgres 中以微秒精度存储日期?
这很丑陋,但在头顶上:
t=# select extract(epoch from TO_TIMESTAMP(1525745241.879112) - '1000000000 seconds'::interval)::numeric(20,6) + 1000000000;
?column?
-------------------
1525745241.879112
(1 row)
Run Code Online (Sandbox Code Playgroud)
https://www.postgresql.org/docs/current/static/functions-datetime.html
extract返回double precision 15位十进制数字精度,所以微秒不适合......
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |