Sql 返回在Postgres中的周数
这就是我现在使用的,它返回beginDate和endDate之间的天数Sql 返回在Postgres中的周数,sql,postgresql,intervals,week-number,Sql,Postgresql,Intervals,Week Number,这就是我现在使用的,它返回beginDate和endDate之间的天数 date( ' $(@endDate)') - date('$(@beginDate)') as weekNumber 如何让它返回两周之间的周数?最简单的方法是将天数除以七,尽管这不考虑一周的起始日 您可以使用此选项: extract (week from date '$(@endDate)') -extract (week from date '$(@startDate)') 这将使用iso8601周编号。但是要小心
date( ' $(@endDate)') - date('$(@beginDate)') as weekNumber
如何让它返回两周之间的周数?最简单的方法是将天数除以七,尽管这不考虑一周的起始日 您可以使用此选项:
extract (week from date '$(@endDate)') -extract (week from date '$(@startDate)')
这将使用iso8601周编号。但是要小心跨越时间 第1版:
/*
Design:
Week begins on day of start date
Options:
1) Count only whole weeks
2) Count partial weeks on the right side (end date side)
*/
select
sum(case when ('2013-02-08'::date - ind::date) >= 7 then 1 else 0 end) as whole_weeks,
count(*) as partial_right
from
generate_series('2013-01-01'::date /*dow=2*/,'2013-02-05'::date /*dow=2*/,'7 days') ind
第2版:
/*
Design:
Week begins on specific day of week (5 chosen in this example)
Options:
1) Count only whole weeks
2) Count partial weeks on the right side (end date side)
3) Count partial weeks on the left side (start date side)
4) Count partial weeks on both sides
*/
select
sum(case when days = 7 then 1 else 0 end) as whole_weeks,
sum(case when days = 7 or max_ind = week_start then 1 else 0 end) as partial_right,
sum(case when days = 7 or week_start < min_ind then 1 else 0 end) as partial_left,
count(*) as partial_both_sides
from
(
select
ind - (case when dow < bow then dow + 7 - bow else dow - bow end)::int as week_start,
count(*) as days,
min(ind) as min_ind,
max(ind) as max_ind
from
(select
ind::date as ind,
extract(isodow from ind) as dow,
5::int as bow
from
generate_series('2013-01-01'::date /*dow=2*/,'2013-02-08'::date /*dow=5*/,'1 day') ind
) inp
group by
week_start
) t
定义周数。没错。正如欧文指出的,这取决于你到底想要什么。你想要整整几个星期吗?几周是从“开始”的第一天开始,还是从某个特定的固定日期开始,这样你就可以在两边各有一周?你是否按部分周报告?等