Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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 返回在Postgres中的周数_Sql_Postgresql_Intervals_Week Number - Fatal编程技术网

Sql 返回在Postgres中的周数

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周编号。但是要小心

这就是我现在使用的,它返回beginDate和endDate之间的天数

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

定义周数。没错。正如欧文指出的,这取决于你到底想要什么。你想要整整几个星期吗?几周是从“开始”的第一天开始,还是从某个特定的固定日期开始,这样你就可以在两边各有一周?你是否按部分周报告?等