如何在PostgreSQL中存储带有毫秒的时间戳?

35

我需要在PostgreSQL数据库中以yyyy-mm-dd hh:mm:ss.SSS(其中SSS代表毫秒)的格式存储时间戳。虽然将其作为文本或varchar可能有效,但我需要与时间戳一起“工作”(例如,过滤早于某个时间戳的所有实例-考虑毫秒)。 如何在PostgreSQL中实现这一点?


那么为什么还需要其他的数据库标签呢? - Pathik Vejani
3
不要将其存储为文本或varchar类型... - Siyual
1
在PostgreSQL中使用timestamp数据类型。我通常使用带有时区的 timestamp with timezone,这将同时提供时区信息。 - Santhucool
1
如果您想在查询过程中获取 yyyy-mm-dd hh:mm:ss.SSS 格式的时间,您可以对其进行格式化以获得所需的格式。 - Santhucool
1
永远不要将时间戳(或日期或数字)存储在varchar列中。千万不要这样做。 - user330315
@a_horse_with_no_name 你是对的,这会破坏 timestamp 的特性。 - Santhucool
1个回答

51

我知道这是一个老问题,但我遇到了类似的问题。

您可以使用timestamp(n)字段,其中n表示要存储在日期上的精度位数(timestamp(3)将为您提供毫秒级精度)

示例

CREATE TABLE date_test (datetime timestamp(3) with time zone);

insert into date_test values(to_timestamp(1525745241.879));

select EXTRACT(epoch FROM datetime) from date_test;

注意: 在当前版本的PostgreSQL中,时间戳被存储为整数,因此不会出现浮点舍入问题。


4
感谢您抽出时间回答,这为我节省了一些时间。 - Daniel Arndt
我找不到默认的精度是什么,但我假设它是 timestamp(6) 微秒,因为我可以存储微秒级时间戳而不需要指定精度。有人知道相关参考吗?还有这个精度字段的最大值是多少? - mDeram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接