Postgres 中从某一天(2021 年 1 月 1 日)开始的工作日

Week Day Starting from a Certain Day (01 Jan 2021) in Postgres

我正在尝试从某一天开始获取一年中的周数 我检查了堆栈但很困惑。

SELECT EXTRACT(WEEK FROM TIMESTAMP '2021-01-01'),
       extract('year' from TIMESTAMP '2021-01-01')

输出为 53|2021

我希望它是 01|2021

我明白 isoweek 的原理,但我希望年份从 01-01-2021 开始

目的是使用从这一天开始的时间间隔来确定周数

Week N0| End Date
     1 | 01-01-2021
     2 | 01-08-2021
     5 | 01-29-2021
...

这种确定周数的方法确实很奇怪,但归根结底是一个简单的数学运算:从一月开始的天数除以 7。

您可以为此创建一个函数:

create function custom_week(p_input date)
  returns int
as
$$
   select (p_input - date_trunc('year', p_input)::date) / 7 + 1;
$$
language sql
immutable;

所以这个:

select date, custom_week(date)
from (
  values 
    (date '2021-01-01'), 
    (date '2021-01-08'), 
    (date '2021-01-29')
) as v(date)

产量

date       | custom_week
-----------+------------
2021-01-01 |           1
2021-01-08 |           2
2021-01-29 |           5