2014-02-05 3 views
0
SELECT NEXT_DAY(NEXT_DAY((TRUNC(TO_DATE('01-JAN-2014', 'DD-MON-YYYY'), 
           'MONTH') - 1), 
         'SATURDAY'), 
       'SATURDAY') SECOND_SATURDAY 
    FROM DUAL; 

Этот запрос показывает только данного месяца дата Вторая субботаКак выбрать все остальные субботы текущего года?

Но я хочу, чтобы все получить вторую субботу текущего года.

Заранее спасибо.

ответ

1

Незначительное Усовершенствование вашей версии, сначала генерируя first day ВСЕХ месяцев, а затем используйте это в своем запросе.

WITH ALL_MONTHS AS 
(SELECT ADD_MONTHS(TO_DATE('01-JAN-2014', 'DD-MON-YYYY'),LEVEL-1) as MONTH_FIRST_DATE 
FROM DUAL 
CONNECT BY LEVEL<=12) 
SELECT NEXT_DAY(NEXT_DAY((TRUNC(MONTH_FIRST_DATE, 
           'MONTH') - 1), 
         'SATURDAY'), 
       'SATURDAY') SECOND_SATURDAY 
    FROM ALL_MONTHS; 

ВСЕ ПОСЕТИТЕЛИ !!

WITH ALL_SATURDAYS AS 
    (SELECT TO_CHAR(TO_DATE('01012014','DDMMYYYY'),'WW')        * (level)                      AS WEEK_NO, 
    NEXT_DAY(TO_DATE('01012014','DDMMYYYY')           + (TO_CHAR(TO_DATE('01012014','DDMMYYYY'),'WW') * (level-1) * 7),'SAT')      AS SATURDAY_DATE, 
    row_number() OVER (PARTITION BY TO_CHAR(NEXT_DAY(TO_DATE('01012014','DDMMYYYY') + (TO_CHAR(TO_DATE('01012014','DDMMYYYY'),'WW') * (level-1) * 7),'SAT'),'MON') ORDER BY level) AS Pos 
    FROM DUAL 
    CONNECT BY level<= 52 
    ORDER BY 1 
) 
SELECT SATURDAY_DATE,POS FROM ALL_SATURDAYS WHERE POS IN (2,4) ORDER BY 1,2 
+0

Great @OracleUser .. Могу ли я узнать, как найти 2-й и 4-й субботу для всех 12 месяцев ... – Sam1604

+0

@ Sam1604 Обновлено моего ответа !! –

+0

Спасибо @OracleUser – Sam1604

Смежные вопросы