如何将这些数据放在一行中

时间:2016-02-25 18:48:38

标签: oracle

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;


我想从给定日期开始,在给定年份的每个月的每个星期显示星期五的日期。

如果我将开始日期定义为2015年3月1日至2016年2月29日,请提供支持 十,我应该得到像

3月3月3月3月3月1日或4月4日可能............ feb feb
06 13 20 27 3 10 ------------------------- 19 26

我在列中获取它们。我怎样才能让它们排好。 提前谢谢。

1 个答案:

答案 0 :(得分: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 */

我在代码中添加了一些注释,以便对不同部分给出最少的解释。