sql - 当表具有时区格式的时间戳时,如何过滤表到日期?
问题描述
我有一个非常大的数据集 - 数亿/十亿的记录。
我想过滤此列中的数据 - 我只显示 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
解决方案
您可以尝试过滤当天的上限和下限。
...
WHERE arrival_time >= '2019-04-22'::timestamp
AND arrival_time < '2019-04-23'::timestamp
...
像这样的索引arrival_time
应该是可用的并有助于提高性能。
推荐阅读
- c# - 如何使用 AJAX 调用 ASP.NET 根页面中的 Web 方法
- c# - 将数据插入 SQL 表显示错误
- c++ - 将十六进制的 std::string 转换为 std::array
- vue.js - 模型值未更新 vue.js laravel 5.8 中复选框的 UI
- angular - Angular 6 应用程序从外部调用应用程序读取参数
- mysql - 具有许多大数组的单表与许多表
- oop - 在这种情况下,依赖倒置如何工作?
- python - 在 django 中创建弹出消息
- scala - 在 1 秒的窗口中获取第 1000 毫秒的数据
- jquery - jQuery - 具有多个 div 和附加隐藏功能的简单 slideToggle