首页 > 解决方案 > 当表具有时区格式的时间戳时,如何过滤表到日期?

问题描述

我有一个非常大的数据集 - 数亿/十亿的记录。

我想过滤此列中的数据 - 我只显示 2 条数百万的记录:

arrival_time 
2019-04-22 07:36:09.870+00
2019-06-07 09:46:09.870+00

如何将此列中的数据过滤为仅日期部分?如我想过滤到达时间为 2019-04-22 的位置,因为这会给我第一条记录以及匹配日期为 2019-04-22 的任何其他记录?

我试图将该列转换为 timestamp::date = "2019-04-22" 但这很昂贵,而且考虑到我有如此大量的记录,它效果不佳。

示例代码是:

select 
*
from 
mytable
where 
arrival_time::timestamp::date = '2019-09-30'

如果我转换为日期格式,这将再次非常昂贵,因为这将在过滤之前完成!

有任何想法吗?我正在使用 postgresql 和 pgadmin4

标签: sqlpostgresql

解决方案


您可以尝试过滤当天的上限和下限。

...
WHERE arrival_time >= '2019-04-22'::timestamp
      AND arrival_time < '2019-04-23'::timestamp
...

像这样的索引arrival_time应该是可用的并有助于提高性能。


推荐阅读