sql - 如何从 Postgres 中的时间戳列获取微秒精度的纪元?

标签 sql postgresql

在 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

最后一位数字丢失的原因是什么?查询是否固有地转换为 float 并失去准确性?有什么简单的方法可以在 Postgres 中以微秒精度存储日期?

最佳答案

它很丑,但是在头顶上:

t=# select extract(epoch from TO_TIMESTAMP(1525745241.879112) - '1000000000 seconds'::interval)::numeric(20,6) + 1000000000;
     ?column?
-------------------
 1525745241.879112
(1 row)

https://www.postgresql.org/docs/current/static/functions-datetime.html 提取 返回 double which is 15十进制数字精度,所以微秒不适合...

关于sql - 如何从 Postgres 中的时间戳列获取微秒精度的纪元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50226454/

相关文章:

sql - 使用 SQL 克隆数据库中表示的树结构

Python Psycopg 执行脚本方法

django - 修改 Django AutoField 起始值

mysql - 如何为自增主键生成下一个值

mysql - 复制并多次插入(mysql)?

java - 如何使用 JDBCIO (apache beam) 执行存储过程/例程

sql - 与表中定义的多个范围相匹配的列的子查询

postgresql - 如何在 PostgreSQL 中将 int 转换为字符串

sql - 在多行上插入单个序列值

mysql - 如何针对 LIKE '%abc%' 查询优化包含 1.6+ 万条记录的 MySQL 表