Postgres 将时间戳值截断为 3 位

问题描述 投票:0回答:1

在我的 postgres 数据库中,我有一个表,我将其称为 users,其中包含 timestamptz 类型列 updated_time。当我在此字段上执行 select 语句时,我会得到类似这样的信息 - '2024-07-01 12:30:30.821 -0500'。但是,如果我转身并使用此值从该表中进行选择,例如

select * from users where updated_time = '2024-07-01 12:30:30.821 -0500'

我没有得到任何结果。这是由于隐藏的精度造成的。如果我使用它,我可以尝试/错误毫秒来构造一个具有 6 位小数的毫秒精度的查询,这将返回如下结果:

select * from users where updated_time = '2024-07-01 12:30:30.821898 -0500'

我的问题是,有谁知道为什么会发生这种情况?表列似乎有 6 毫秒的精度,select 语句没有反映出来。

附加说明:我确实尝试运行查询

select * '2024-07-01 12:30:30.821898 -0500'::timestamptz

这给了我毫秒截断值:'2024-07-01 12:30:30.821 -0500'

然后我尝试了

select '2024-07-01 12:30:30.821898 -0500'::timestamptz(6);

这仍然给我截断的值:'2024-07-01 12:30:30.821 -0500 -0500'

似乎无论我做什么,在选择时我都会坚持 3 毫秒小数位的精度。

任何帮助将不胜感激。谢谢!

sql postgresql
1个回答
0
投票

timestamptz
(以及 postgres 中的所有时间)的分辨率为 1 微秒 或 0.000001 秒。

您用来显示 Postgres 查询结果的工具会截断时间戳值,从而导致混乱。

例如,您可能会看到

2024-07-01 12:30:30.821 -0500
,但实际值是
2024-07-01 12:30:30.821898 -0500
2024-07-01 12:30:30.821 -0500
不会匹配
2024-07-01 12:30:30.821898 -0500

配置您的工具,使其不再截断,或尝试使用更简单的工具,例如官方

psql
客户端。一般来说,使用
psql
来调试 PostgreSQL 问题;它会告诉您这是 PostgreSQL 问题还是介于两者之间的问题。

示范.

© www.soinside.com 2019 - 2024. All rights reserved.