Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 博士后-获得第X周的星期一_Sql_Postgresql_Date_Datetime_Dayofweek - Fatal编程技术网

Sql 博士后-获得第X周的星期一

Sql 博士后-获得第X周的星期一,sql,postgresql,date,datetime,dayofweek,Sql,Postgresql,Date,Datetime,Dayofweek,在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) 你可以使用日期算术。假设yr和wk是年和周参数: date_trunc(

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

你可以使用日期算术。假设
yr
wk
是年和周参数:

date_trunc('week', make_date(yr, 1, 1)) + (wk- 1) * interval '1 week'
但是,请注意,这不会检测超出范围的周数(但您可以轻松添加条件逻辑来处理)

select yr, wk, date_trunc('week', make_date(yr, 1, 1)) + (wk- 1) * interval '1 week' res
from (values (1, 2020), (33, 2020), (53, 2020), (54, 2020)) as t(wk, yr)
年工作日 ---: | -: | :--------------------- 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
这是否回答了你的问题?2020年1月如何导致2019-01-30?我对这个逻辑感到困惑。@I不,因为这个答案给出了“当前”一周的星期一,而不是一个任意的星期一one@GordonLinoff,在那里,修复了困扰整个人类逻辑的可怕错误。我可能会写
(yr | |'-01-01')::date
as
make_date(yr,1,1)
@一匹没有名字的马:的确更干净。。。非常感谢。 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