1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| SELECT semaine.numero, semaine.annee, module.*
FROM module
INNER JOIN
(
/**Calcul des numéros de semaines et des années à partir de la date en cours et des X semaines à venir*/
SELECT CASE WHEN LEVEL + TO_NUMBER(TO_CHAR(SYSDATE, 'iw')) - 1 <= 52 THEN LEVEL + TO_NUMBER(TO_CHAR(SYSDATE, 'iw')) - 1 ELSE LEVEL + TO_NUMBER(TO_CHAR(SYSDATE, 'iw')) - 53 END numero,
CASE WHEN LEVEL + TO_NUMBER(TO_CHAR(SYSDATE, 'iw')) - 1 <= 52 THEN EXTRACT(YEAR FROM TO_DATE(SYSDATE)) ELSE EXTRACT(YEAR FROM TO_DATE(SYSDATE))+1 END annee
FROM DUAL
/**Pour les X prochaines semaines*/
CONNECT BY LEVEL <= 8
) semaine
/** La date de début ou de fin du module doit être compris entre le lundi et le dimanche du numéro de la semaine en cours de recherche */
ON (module.date_debut BETWEEN TRUNC(TO_DATE(semaine.annee || '-01-04', 'YYYY-MM-DD'), 'IW') + 7 * (semaine.numero - 1) AND TRUNC(TO_DATE(semaine.annee || '-01-04', 'YYYY-MM-DD'), 'IW') + 7 * (semaine.annee - 1) + 6
OR
module.date_fin BETWEEN TRUNC(TO_DATE(semaine.annee || '-01-04', 'YYYY-MM-DD'), 'IW') + 7 * (semaine.numero - 1) AND TRUNC(TO_DATE(semaine.annee || '-01-04', 'YYYY-MM-DD'), 'IW') + 7 * (semaine.annee - 1) + 6)
ORDER BY semaine.annee, semaine.numero, module.date_debut, module.date_fin |
Partager