今年2014有:
Jan-4
Feb-4
Mar-5
Apr-4
May-4
Jun-5
Jul-4
Aug-4
Sep-5
Oct-4
Nov-4
Dec-5
如何计算任何给定年份的这个?
今年2014有:
Jan-4
Feb-4
Mar-5
Apr-4
May-4
Jun-5
Jul-4
Aug-4
Sep-5
Oct-4
Nov-4
Dec-5
如何计算任何给定年份的这个?
有多种方法可以准确定义“一个月中的几周”。假设您的计数已定义(如您的数字所示):
一年中每个月有几个星期一?
你可以像这样生成它:
简单的:
SELECT EXTRACT(month FROM d) AS mon, COUNT(*) AS weeks
FROM generate_series('2014-01-01'::date
, '2014-12-31'::date
, interval '1 day') d
WHERE EXTRACT(isodow FROM d) = 1 -- only Mondays
GROUP BY 1
ORDER BY 1;
快速地:
SELECT EXTRACT(month FROM d) AS mon, COUNT(*) AS weeks
FROM generate_series ('2014-01-01'::date -- offset to first Monday
+ (8 - EXTRACT(isodow FROM '2014-01-01'::date)::int)%7
, '2014-12-31'::date
, interval '7 days') d
GROUP BY 1
ORDER BY 1;
无论哪种方式,您都会得到:
mon weeks
1 4
2 4
3 5
4 4
5 4
6 5
7 4
8 4
9 5
10 4
11 4
12 5
只需2014
在每个查询中替换为感兴趣的年份即可。
按照此处的建议将 ISO 8601 应用到一个月
select
to_char(d, 'YYYY Mon') as "Month",
case when
extract(dow from d) in (2,3,4)
and
extract(day from (d + interval '1 month')::date - 1) + extract(dow from d) >= 33
then 5
else 4
end as weeks
from generate_series(
'2014-01-01'::date, '2014-12-31', '1 month'
) g (d)
;
Month | weeks
----------+-------
2014 Jan | 5
2014 Feb | 4
2014 Mar | 4
2014 Apr | 4
2014 May | 5
2014 Jun | 4
2014 Jul | 5
2014 Aug | 4
2014 Sep | 4
2014 Oct | 5
2014 Nov | 4
2014 Dec | 4