设置从当年的第一天直到今年接下来的星期一的第一个星期
我想,甲骨文把星期方式如下:设置从当年的第一天直到今年接下来的星期一的第一个星期
-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
算术的一点点可能会做的伎俩(假设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检查我没有犯一个愚蠢的错误,因为我没有时间仔细测试它。对不起...
伟大的工程,伟大的公式! – 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
我查询2-jan-2017是星期一,会给我为weeknum 1所以不好,我想要一个2结果 – elvainch 2014-12-03 19:01:04
你可以用日期算法做到这一点,但我宁愿使用日历表。 – 2014-12-03 17:27:15
你需要第一周的部分时间吗?或者它可能包含前一年的最后几天?即:第一周是2014年1月1日至2014年1月5日或2013年12月30日至2014年1月5日? – 2014-12-03 18:57:15
不真的在乎它包含前一年的日子,只要我提到的两个条件都满足 – elvainch 2014-12-03 19:08:04