在Postgres中查询纳秒级别的DateTime Varchar

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

我有一个 Postgres 表,其中有一列,其中的 DateTime 值为 varchar。

date_column 
"2023/10/26 17:20:00.100100000"
"2023/10/26 17:20:00.100100000"

为了以微秒级别过滤此列,我使用如下 SQL 查询。

SELECT * FROM date_data
 WHERE TO_TIMESTAMP(date_column , 'YYYY/MM/DD HH24:MI:ss.US')  
 BETWEEN  TIMESTAMP '2023-01-01 09:09:09.000000000' AND TIMESTAMP '2024-01-11 09:09:09.000000000';

如上面的查询所示,我使用 TO_TIMESTAMP 方法将 DateTime varchar 转换为 TimeStamp 类型。 我的问题是 Postgres 不支持转换为纳秒级别的时间戳。它仅支持微秒级。 'YYYY/MM/DD HH24:MI:ss.US'

postgresql timestamp sql-timestamp
1个回答
0
投票

正如您已经指出的,nano (1e-9) 超出了 PostgreSQL micro (1e-6) 的精度限制。您可以考虑

timestamp9
扩展,它提供了
timestamp
的更细粒度、纳秒级精度的版本。

否则,超出限制的任何内容都必须提取到单独的列或捆绑到自定义类型的附加字段中,这两种方式都不太漂亮:演示

create type timestamp_plus_nano as (ts timestamp, nano smallint);
select ('2023-01-01 09:09:09.123456',789)::timestamp_plus_nano;

这两者都迫使您将 4 个值/字段与 2 个值/字段进行比较,而不是 2 个值/字段与 1 个值/字段进行比较,这不是很方便。

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