使用date_trunc创建Postgresql索引

时间:2019-04-18 17:50:50

标签: postgresql postgresql-11

与此question相关。我想创建一个返回与该查询相同的输出的索引;

--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

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

1 个答案:

答案 0 :(得分:1)

Quote from the manual

  

返回值的类型为timestamp或interval,所有字段的重要性都小于所选字段的重要性(设置为零)

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

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

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

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