0

我有一个问题分为两部分

第1部分

如何以 sysdate 作为当前周获取以下记录集?

07-Apr-2013 - 13-Apr-2013
14-Apr-2013 - 20-Apr-2013
21-Apr-2013 - 27-Apr-2013
28-Apr-2013 - 04-May-2013

如果一周过去了 2012 年 4 月 7 日 - 2013 年 4 月 13 日,那么接下来的四组。所以总是会有 4 周的时间。

第2部分

如果本周在日期范围内,即 2012 年 4 月 7 日 - 2013 年 4 月 13 日,我想从列表中获取星期一和星期五。

如何获得所需的输出?

4

3 回答 3

2
select 
  max(trunc(sysdate) + level - 7) as sunday,
  max(trunc(sysdate) + level - 2) as friday,
  max(trunc(sysdate) + level - 1) as saturday
from dual
connect by level < 30
group by to_char(sysdate + level, 'iw')
having max(trunc(sysdate) + level - 1) <= sysdate + 27
order by 1 

小提琴

于 2013-04-08T16:41:58.873 回答
2

我对您在示例中提供的日期范围有点困惑,因为每个范围的开始日期是 2013 年的星期日,但您将 2012 年显示为年份。我将假设 2012 是一个错字。

这能得到你想要的吗?

select 
case
    when trunc(sysdate) between start_date and end_date
    then to_char(start_date + 1, 'DD-MON-YYYY')
    else to_char(start_date, 'DD-MON-YYYY')
end
|| ' - ' ||
case
    when trunc(sysdate) between start_date and end_date
    then to_char(end_date - 1, 'DD-MON-YYYY')
    else to_char(end_date, 'DD-MON-YYYY')
end date_range
from
(    
    select 
        next_day(trunc(sysdate - 7 + ((level - 1) * 7)), 'SUN') start_date,
        next_day(trunc(sysdate) + ((level - 1) * 7), 'SAT') end_date
    from dual
    connect by level < 5
)

如果你只想要 4 周,那么你可以这样做

select 
    to_char(next_day(trunc(sysdate - 7 + ((level - 1) * 7)), 'SUN'), 'DD-MON-YYYY') 
    || ' - ' ||
    to_char(next_day(trunc(sysdate) + ((level - 1) * 7), 'SAT'), 'DD-MON-YYYY') date_range
from dual
connect by level < 5
于 2013-04-08T17:25:31.337 回答
2

第 1 部分(从本周开始 4 周)

SELECT TO_CHAR(trunc(SYSDATE, 'DY')) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 6) from dual
UNION
SELECT TO_CHAR(trunc(SYSDATE, 'DY')+7) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 13) from dual
UNION
SELECT TO_CHAR(trunc(SYSDATE, 'DY')+14) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 20) from dual
UNION
SELECT TO_CHAR(trunc(SYSDATE, 'DY')+21) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 27) from dual
;

第 2 部分本周的周一和周五:

SELECT trunc(SYSDATE, 'DY')+1 "Monday", trunc(SYSDATE, 'DY')+5 "Friday"
FROM dual;

这是SQL Fiddle

于 2013-04-08T17:41:55.510 回答