2016-02-25 93 views
0
SELECT TO_CHAR(X,'MON'),TO_CHAR(X,'DD') 
FROM 
(SELECT CASE WHEN TO_CHAR(TO_DATE('01-MAY-2015')+(ROWNUM-1),'DY') = 'FRI' THEN<br> 
TO_DATE('01-MAY-15')+(ROWNUM-1) ELSE NULL END AS X FROM all_objects<br> 
WHERE ROWNUM < (select (to_date ('01-MAY-16') - to_date('01-MAY-15')+1) <br> 
    from dual)) 
WHERE X IS NOT NULL; 


我怎样才能在单行

我想显示周五的一个月每周对日对于给定的一年,从给定日起得到这个数据。

suppoise如果我给的开始日期为01-MAR-2015 29-FEB-2016 十大我应该像

三月三月三月三月四月四月四月四月五月........ .... feb feb
06 13 20 27 3 10 ------------------------- 19 26

我得到它们在列中。我怎么能让他们在行中。 在此先感谢。

回答

0

您可能需要像这样:

with test(start_date) as 
    (select to_date('15022016', 'ddmmyyyy') from dual) /* your start date */ 
select listagg(to_char(date_, 'dd/mm/yyyy'), ', ') 
     within group(order by date_) /* concatenation of dates */ 
from (
     select start_date + level -1 date_ /* to generate dates */ 
     from test 
     connect by start_date + level -1 <= add_months(start_date, 12) /* to keep dates in one year from the starting date */ 
    ) 
where to_char(date_, 'd') = 5 /* check if friday, the 5th day of week */ 

我把一些评论在代码中给出最低的解释自动对焦的不同部分。