Postgres-获取第X周的星期一

问题描述

在Postgres中,给定Y年的第X周,如何获取该周/年的星期一日期?

示例:

monday_of(1,2020) -> '2020-01-30'
monday_of(33,2020) -> '2020-08-10'
monday_of(53,2020) -> '2020-12-28'
monday_of(54,2020) -> '' (year does not have 54 weeks)

解决方法

您可以使用日期算术。假设yrwk是年和周参数:

date_trunc('week',make_date(yr,1,1)) + (wk- 1) * interval '1 week'

但是请注意,这不会检测到超出范围的周数(但是您可以轻松地添加条件逻辑来处理)。

Demo on DB Fiddle

select yr,wk,date_trunc('week',1)) + (wk- 1) * interval '1 week' res
from (values (1,2020),(33,(53,(54,2020)) as t(wk,yr)
  yr | wk | res                   
---: | -: | :---------------------
2020 |  1 | 2019-12-30 00:00:00+00
2020 | 33 | 2020-08-10 00:00:00+01
2020 | 53 | 2020-12-28 00:00:00+00
2020 | 54 | 2021-01-04 00:00:00+00