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"

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
(days(date(date2)) - days(date(date1))) 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à !
Au final, voilà le seul moyen que j'ai trouvé pour faire ma comparaison :
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"
Merci à tous.
Gôm

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 !
Merci encore et bravo pour le site Internet et ce Forum.
