Bonjour,
Je suis sur une function à premirère vue assez simple mais qui ne pose des difficultées;
En paramètre 'in' je donne une date, cette dernière sera envoyée en chaine de caractère mais réduite d'un mois.
Exemple de ce que je veux obtenir:
J'appelle la fonction avec la date paramètre : '23/01/2008'
et le résultat est : 01/12/2007 donc je réduit avec un mois et 23 jours
Exmple 2 : je donne 26/12/2007 et le résultat est : 01/11/2007 donc je réduit d'un mois et 26 jours
Voici la fonction que je pensée donner les bons résultats:
Je me suis apperçu que finalement la fonction n'entre jamais dans les IF et execute à chaque fois ELSE.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 CREATE OR REPLACE FUNCTION dateEnChaineReleveTSP(d in DATE) RETURN VARCHAR2 IS BEGIN IF ( TO_CHAR(d,'MM') = '1') THEN //Ligne de trace DBMS_OUTPUT.PUT_LINE('01/12/'||to_char(d,'YYYY')-1||' '|| '00:00:00'); RETURN '01/12/'||to_char(d,'YYYY')-1||' '||'00:00:00'; END IF; IF (LENGTH(TO_CHAR(d,'MM'))=1) THEN //trace DBMS_OUTPUT.PUT_LINE('01/0'||(TO_CHAR(d,'MM')-1) ||'/'||TO_CHAR(d,'YYYY')||' '|| '00:00:00'); RETURN '01/0'||(TO_CHAR(d,'MM')-1) ||'/'||TO_CHAR(d,'YYYY')||' '|| '00:00:00'; ELSE //trace DBMS_OUTPUT.PUT_LINE('01/'||(TO_CHAR(d,'MM')-1) ||'/'||TO_CHAR(d,'YYYY')||' '|| '00:00:00'); RETURN '01/'||(TO_CHAR(d,'MM')-1) ||'/'||TO_CHAR(d,'YYYY')||' '|| '00:00:00'; END IF; END; /
Avez - vous une idée pourquoi?
J'ai beau cherché à changer les if les transformations de char en date et l'inverce mais pas de réusite.
Merci d'avance pour aide.
Martin
Partager