Bonjour,
J'ai la requête suivante qui génère une erreur
L'erreur générée est ORA-01839: date not valid for month specified.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 select NUDOSS, SOCDOS, PGPDOS, 1 NULIGN, TO_DATE(substr(anmois,1,4) || '-' || substr(anmois,5,2) || '-' || '31', 'YYYY-MM-DD'), CODE5C, IDCONT, VALE31, FINP31 , TO_CHAR ( (TO_DATE(substr(anmois,1,4) || '-' || substr(anmois,5,2) || '-' || '31', 'YYYY-MM-DD')), 'DY' ) JRCPTR from ZY5C where substr(anmois,5,2) in ('01', '03', '05', '07', '08', '10', '12') and TO_DATE ( (substr(anmois,1,4) || '-' || substr(anmois,5,2) || '-' || '31'), 'YYYY-MM-DD' ) >= (SYSDATE - 90) and TO_DATE ( (substr(anmois,1,4) || '-' || substr(anmois,5,2) || '-' || '31'), 'YYYY-MM-DD' ) <= (SYSDATE + 90) /
Le champ anmois de zy5c contient une chaine de type 201001, 201002 etc ..
En revanche la requête suivante passe sans problème :
Il semblerait qu'oracle utilise les filtres dans un ordre qu'il juge plus efficient ce qui fait qu'il évalue le filtre ci-dessous en premier (ce qui gènère une erreur lorsqu'il tombe sur un enregistrement du type 201002 pour anmois (si oracle utilisait les filtres dans l'ordre indiqué dans la requête il n'y aurait pas de problème).Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 select NUDOSS, SOCDOS, PGPDOS, 1 NULIGN, TO_DATE(substr(anmois,1,4) || '-' || substr(anmois,5,2) || '-' || '31', 'YYYY-MM-DD'), CODE5C, IDCONT, VALE31, FINP31 , TO_CHAR ( (TO_DATE(substr(anmois,1,4) || '-' || substr(anmois,5,2) || '-' || '31', 'YYYY-MM-DD')), 'DY' ) JRCPTR from ZY5C where substr(anmois,5,2) in ('01', '03', '05', '07', '08', '10') and TO_DATE ( (substr(anmois,1,4) || '-' || substr(anmois,5,2) || '-' || '31'), 'YYYY-MM-DD' ) >= (SYSDATE - 90) and TO_DATE ( (substr(anmois,1,4) || '-' || substr(anmois,5,2) || '-' || '31'), 'YYYY-MM-DD' ) <= (SYSDATE + 90) /
Il y a t-il moyen de forcer l'ordre d'utilisation des filtres ?Code:
1
2
3
4
5
6 TO_DATE ( (substr(anmois,1,4) || '-' || substr(anmois,5,2) || '-' || '31'), 'YYYY-MM-DD' ) >= (SYSDATE - 90)
merci pour votre aide