Page 1 sur 1

[SQL] Soustraire 2 dates au format numérique (aaaammjj) ?

Posté : lun. 08 déc. 2008, 10:05:16
par gom
Bonjour,

Savez-vous comment je peux récupérer le nombre de jours séparant ces 2 dates ?

J'ai essayé comme ça ...

Code : Tout sélectionner

select * from maBibliotheque.monFichier where DATE(date2) - DATE(date1);
... mais aucune valeur ne m'est retournée : "NULL" ??


Merci d'avance.

Gôm

(sans texte)

Posté : lun. 08 déc. 2008, 10:40:00
par gom
Nouveau test ... nouvel échec :

Code : Tout sélectionner

(
days(date(substr(date2, 1, 4) || '-' || substr(date2, 5, 2) || '-' || substr(date2, 7, 2))) 
- 
days(date(substr(date1, 1, 4) || '-' || substr(date1, 5, 2) || '-' || substr(date1, 7, 2)))
) as "Ecart"
:cry:

Ecart entre 2 dates

Posté : lun. 08 déc. 2008, 10:42:32
par cmasse
La différence entre deux dates (DATLIV - DTACMD) est founies sous la forme de 8 chiffres AAAAMMJJ.

ainsi 00010204 signifie 1 année, 2mois et 4 jours; 812, 8 Mois 12 Jours.


Pour avoir un écart en jours, le mieux est d'utiliser la fonction DAYS


WHERE DAYS(DATLIV) - DAYS(DATCMD) < 90 ==> s'il y a moins de 90 jours entre les 2 dates.

(sans texte)

Posté : lun. 08 déc. 2008, 11:22:09
par gom
Merci mais

Code : Tout sélectionner

&#40;days&#40;date&#40;date2&#41;&#41; - days&#40;date&#40;date1&#41;&#41;&#41; as "ecart"
est apparemment syntaxiquement correct, mais me renvoie "<erreur>" dans toutes les lignes de ma colonne "ecart".


:?:

PS : date1 et date2 sont au format "Numérique".

(sans texte)

Posté : lun. 08 déc. 2008, 11:51:58
par luc.marionneau
Tes dates sont elles bien au format ISO ?

ecart entre deux dates

Posté : lun. 08 déc. 2008, 11:53:26
par cmasse
Je pense que c'est la fonction DATE qui est en erreur. Cette dernière admet comme argument un ecart depuis le 1er janvier de l'AN 1 ou une chaîne représentant une date EDITEE.


par exemple

DATE('08/12/08') est valide sur une session 5250
DATE('2008-12-08') est valide via ODBC/JDBC

tout cela étant fonction de votre paramétrage, DATFMT et DATSEP pour STRSQL par exemple.

(sans texte)

Posté : lun. 08 déc. 2008, 14:04:09
par gom
Effectivement, je suis en JDBC et le problème venait de là ! :roll:

Au final, voilà le seul moyen que j'ai trouvé pour faire ma comparaison :

Code : Tout sélectionner

    &#40;
        days&#40;date&#40;substr&#40;date2, 1, 4&#41; || '-' || substr&#40;date2, 5, 2&#41; || '-' || substr&#40;date2, 7, 2&#41;&#41;&#41; 
        - 
        days&#40;date&#40;substr&#40;date1, 1, 4&#41; || '-' || substr&#40;date1, 5, 2&#41; || '-' || substr&#40;date1, 7, 2&#41;&#41;&#41;
    &#41; 
    as "Ecart" 


Merci à tous.

Gôm :wink:

fonction DATE

Posté : lun. 08 déc. 2008, 14:08:16
par cmasse
C'est juste et c'est effectivement le seul moyen, sauf à écrire vos propres fonctions (UDF ou User Defined Functions)

(sans texte)

Posté : lun. 08 déc. 2008, 14:09:57
par gom
C'est donc le seul moyen pour moi ! :lol:


Merci encore et bravo pour le site Internet et ce Forum. :wink: