设置从一年的第一天到下一个星期一的第一周

时间:2014-12-03 17:22:21

标签: sql oracle date

我希望甲骨文以下列方式对待周:

- 星期一星期一开始 - 一年的第一周是从一年的第一天到下一个星期一

因此2015年将是

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

2017年将是

01-jan-2017(星期日)将是1 02-jan-2017(星期一)将是2
03-jan-2017(星期二)将是2
04-jan-2017(星期三)将是2周

依旧......

我需要一年的数字,所以会到1到53-54

2 个答案:

答案 0 :(得分:1)

使用ISO周日期标准:'iw'。

2014-01-01实际上是星期三,所以:

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

答案 1 :(得分:1)

一些算术可能会做到这一点(假设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以检查我是否犯了一个愚蠢的错误,因为我没有时间仔细测试它。对不起...