设置从当年的第一天直到今年接下来的星期一的第一个星期

问题描述:

我想,甲骨文把星期方式如下:设置从当年的第一天直到今年接下来的星期一的第一个星期

-The星期周一
开始今年-The第一周从当年的第一天,直到下一个星期一

因此,对于2015年将是

01-JAN-2015(星期四)将1
02-JAN-2015(星期五)将1
2015年1月3日(星期六)将是1
04-JAN-2015(星期日)将1
05-JAN-2015(星期一)将2
06 - 2015年(星期二)将2

对于2017年将是

01-JAN-2017(星期日)将1
02-JAN-2017(星期一)将2
03-JAN-2017(星期二)将2
04-JAN-2017(星期三)将be 2

等....

我需要为今年的记数,从而会去1至53-54

+0

你可以用日期算法做到这一点,但我宁愿使用日历表。 – 2014-12-03 17:27:15

+0

你需要第一周的部分时间吗?或者它可能包含前一年的最后几天?即:第一周是2014年1月1日至2014年1月5日或2013年12月30日至2014年1月5日? – 2014-12-03 18:57:15

+0

不真的在乎它包含前一年的日子,只要我提到的两个条件都满足 – elvainch 2014-12-03 19:08:04

算术的一点点可能会做的伎俩(假设d是你日期):

select TRUNC((case to_char(d, 'DY') 
      when 'MON' then 6 
      when 'TUE' then 5 
      when 'WED' then 4 
      when 'THU' then 3 
      when 'FRI' then 2 
      when 'SAT' then 1 
      when 'SUN' then 0 
     end + to_number(to_char(d, 'DDD'))-1)/7)+1 
from v; 
  • case声明将根据星期几的日期建立偏移量
  • 下一页我添加当天的日期
  • 然后我用7分结果为周数(从0开始)
  • 最后,+1开始编号周在1

请花一些时间与它进行实验http://sqlfiddle.com/#!4/d41d8/38236检查我没有犯一个愚蠢的错误,因为我没有时间仔细测试它。对不起...

+0

伟大的工程,伟大的公式! – elvainch 2014-12-04 12:40:43

使用ISO周日期标准:“IW”。

2014年1月1日是星期三实际上,这样:

select 
    to_number(to_char(date'2014-01-05', 'iw')) as weeknum, 
    to_char(date'2014-01-05', 'Day') as day 
from dual; 

    WEEKNUM DAY 
----------- --------- 
      1 Sunday 

select 
    to_number(to_char(date'2014-01-06', 'iw')) as weeknum, 
    to_char(date'2014-01-06', 'Day') as day 
from dual; 

    WEEKNUM DAY 
----------- --------- 
      2 Monday 
+0

我查询2-jan-2017是星期一,会给我为weeknum 1所以不好,我想要一个2结果 – elvainch 2014-12-03 19:01:04