Je cherchais à faire l'équivalent de to_date('&P_SEMAINE &P_ANNEE', 'IW IYYY') qui est invalide.
C'est le plus compréhensible que j'ai pu faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select to_char( to_date('001 &P_ANNEE', 'DDD YYYY') - premierJour + 1 + case when premierJour <= 4 then 0 else 7 end + (&P_SEMAINE - 1) * 7 , 'DAY DD/MM/YYYY') from (select to_number(to_char(to_date('001 &P_ANNEE', 'DDD YYYY'), 'D')) premierJour from dual)
Si on ne veut pas ajouter d'accès à DUAL, on peut utiliser directement l'expression suivante qui est équivalente à ce qui était recherché en haut
Après quelques tests, ça a l'air de fonctionner. Il faudrait regarder tout de même ce que ça donne avec d'autre réglages régionaux que la France.
Code : Sélectionner tout - Visualiser dans une fenêtre à part to_date('001 &P_ANNEE', 'DDD YYYY') - to_number(to_char(to_date('001 &P_ANNEE', 'DDD YYYY'), 'D')) + 1 + case when to_number(to_char(to_date('001 &P_ANNEE', 'DDD YYYY'), 'D')) <= 4 then 0 else 7 end + (&P_SEMAINE - 1) * 7
Partager