SQL查询返回前几周

时间:2017-06-28 15:55:32

标签: sql oracle

我需要SQL查询,该查询将以sam格式在给定的一周内以2017W03的格式返回前10周。

因此,对于格式为2017W05的一周,此查询应返回:

2017W05
2017W04
2017W03
2017W02
2017W01
2016W52
2016W51
2016W50
2016W49
2016W48

2 个答案:

答案 0 :(得分:1)

这是一个简化的解决方案,利用了1月4日始终属于同年的第一个ISO周的事实。 (1月1日可能会出现在去年的最后一个ISO周,这将导致并发症。)

早期版本(可通过点击答案下面的"编辑的......"链接进行审核)没有利用此观察结果。

另外,归功于tbone - 为了获得正确的ISO年/周组合,我们必须使用年份的格式模型组件 IYYY (在TO_CHAR中),而不是 YYYY

with
     input ( str ) as (
       select '2017W05' from dual
     )
select     to_char(to_date(substr(str, 1, 4)||'0104', 'yyyymmdd') +
                     7 * (to_number(substr(str, 6)) - level), 'iyyy"W"iw') as result
from       input
connect by level <= 10
;



RESULT
-------
2017W05
2017W04
2017W03
2017W02
2017W01
2016W52
2016W51
2016W50
2016W49
2016W48

答案 1 :(得分:0)

这应该为您提供列出的输出:

select TO_CHAR(to_date('20170201','YYYYMMDD')-(7*(level-1)),'IYYY"W"IW') 
from dual
connect by level <= 10

输出:

2017W05
2017W04
2017W03
2017W02
2017W01
2016W52
2016W51
2016W50
2016W49
2016W48

从2017年2月1日的任意日期开始