gpt4 book ai didi

javascript - 按精确值匹配 PotsgreSQL timestamptz

转载 作者:行者123 更新时间:2023-12-02 18:31:32 29 4
gpt4 key购买 nike

我通过 Supabase.io 使用 PostgreSQL 13.3。我有一个表,其中有一个名为modified_at的字段,其类型为timestamptz:

CREATE TABLE IF NOT EXISTS knowledge_views (
id uuid NOT NULL DEFAULT uuid_generate_v4() PRIMARY KEY,
modified_at timestamp with time zone DEFAULT timezone('utc'::text, now()) NOT NULL
);

我其中有一个条目,其中modified_at是:2021-09-27T20:55:25.625Z (编辑:事实并非如此,Supabase 目前隐藏了微秒)。以下语句均无效:

SELECT * FROM knowledge_views WHERE modified_at = timestamptz '2021-09-27T20:55:25.625Z';

SELECT * FROM knowledge_views WHERE modified_at = '2021-09-27T20:55:25.625Z'::timestamptz;

SELECT * FROM knowledge_views WHERE modified_at = to_timestamp(1632776125.625);

SELECT * FROM knowledge_views WHERE modified_at >= to_timestamp(1632776125.625) AND modified_at <= to_timestamp(1632776125.625);

但是,如果采用最后一个查询并增加 <= 的毫秒数按一到1632776125.626然后它正确地找到行:

SELECT * FROM knowledge_views WHERE modified_at >= to_timestamp(1632776125.625) AND modified_at <= to_timestamp(1632776125.626);

有没有办法通过精确的时间戳值(包括毫秒)来选择行?

如果这是不可能的,那么在最大毫秒值上加 1 的(hacky)方法是否可靠?或者我也应该从最小值减一,例如:>= to_timestamp(1632776125.624) AND modified_at <= to_timestamp(1632776125.626)

** 编辑 **

使用以下内容可以显示该字段实际上是以微秒精度存储的:

SELECT modified_at as original, cast(extract(epoch from modified_at) * 1000000 as bigint) FROM knowledge_views;
<表类=“s-表”><标题>原始int8 <正文>2021-09-27T20:55:25. 625Z1632776125 625 535

我意识到它之前可以工作,因为客户端保持时间戳值字符串不变,即:

supabase.from("knowledge_views").select("*").eq("modified_at", "2021-09-27T20:55:25.625535")

当我使用: new Date("2021-09-27T20:55:25.625535") 时,它就坏了这减少了微秒。

最佳答案

I have an entry in it where the modified_at is: 2021-09-27T20:55:25.625Z.

你怎么知道这是准确的值?我这样问是因为 Postgres 时间戳具有微秒分辨率(6 个小数位)。默认情况下不显示尾随零,但有可能 now() (在你的奇数列 DEFAULT 中)产生了一个四舍五入到毫秒的时间戳,恰好是千分之一。基础知识:

我的猜测是,您的客户报告时间戳四舍五入为毫秒(可能是由于不幸的设置?)。运行SELECT * FROM knowledge_views;在像 default PostgreSQL interactive terminal psql 这样的理智客户中以获得实际值。然后你会发现=运算符按预期工作 timestamptz .

关于javascript - 按精确值匹配 PotsgreSQL timestamptz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69354017/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com