首页 > 解决方案 > 使用 date_trunc 创建 Postgresql 索引

问题描述

涉及到这个问题。我想创建一个返回与此查询相同的输出的索引;

--takes 2005-10-12
select date_trunc('month',table_withdates.dateoftransfer::date)::Date
from table_withdates;
--returns 2005-10-01

下面将索引但返回时间戳添加到日期,这不是我想要的。

create index on table_withdates  (date_trunc('month', dateoftransfer::timestamp));
--returns 2005-10-01 00:00:00

是否可以创建一个索引,以该格式返回没有时间戳的日期

标签: postgresqlpostgresql-11

解决方案


从手册中引用

返回值的类型为时间戳或间隔,所有比所选字段不重要的字段都设置为零

因此,您需要将结果date_trunc转换为日期:

create index on table_withdates  (date_trunc('month', dateoftransfer)::date);

请注意,为了使索引可用于查询,您需要使用完全相同的表达式,例如:

where date_trunc('month', dateoftransfer)::date  = ...

推荐阅读