Avec un case c'est plus optimisé je pense
Tous les mois 1-10 : On prend le premier jour de l'année et on enlève 2 mois
Les mois 11 et 12 : On prend le premier jour de l'année et on rajoute 10 mois
ADD_MONTHS(TRUNC(ladate, 'RR'), CASE WHEN EXTRACT(MONTH FROM ladate) IN (11, 12) THEN 10 ELSE -2 END)
Exemple :
1 2 3 4
|
select ladate, ADD_MONTHS(TRUNC(ladate, 'RR'), CASE WHEN EXTRACT(MONTH FROM ladate) IN (11, 12) THEN 10 ELSE -2 END)
from (
SELECT ADD_MONTHS(trunc(sysdate, 'MM'), -15 + level) ladate fROM dual connect by level < 30) laTable |
On peut aussi découper
1 2 3 4 5
| CASE EXTRACT(MONTH FROM ladate)
WHEN 11 THEN ladate
WHEN 12 THEN ADD_MONTHS(ladate, -1)
ELSE ADD_MONTHS(TRUNC(ladate, 'RR'), -2)
END |
Partager