首页 > 解决方案 > 带有年份和周数的 Postgresql 日期范围查询

问题描述

嗨,我想将给定一周的工作时间数存储在一个带有小时、年、周的表格中

所以我可以快速汇总一周的小时数,其中 week 是 ISO 周数。

然后我想在这个表上做一个日期范围过滤查询,比如说

从 2018 年 12 月 24 日到 2019 年 1 月 21 日(2018 年第 52 周到 2019 年第 4 周)。

如果用户通过年和周,那么我需要对复合索引进行范围检查,您首先比较年值,然后是周数。

我应该如何构造查询和索引以有效地检索此范围内的记录?

这是一个基本的尝试,给定开始年份和开始周,以及结束年份和结束周:

select year, week, hours
  from
  weekly hours
  where((year = 2018 and week >= 52) OR year > 2018) AND
       ((year = 2019 and week <=3) OR year < 2019)

标签: postgresql

解决方案


<=您可以使用or运算符比较多个列>=

select *
from weekly_hours
where (year, week) >= (2018,52)
  and (year, week) <= (2019,3);

该查询可以使用两列上的索引,例如

create index on weekly_hours (year, week);

推荐阅读