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
我正在尝试从某一天开始获取一年中的周数 我检查了堆栈但很困惑。
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