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

RPG (3 et 4, free), CL, SQL, etc...
Répondre
gom
Messages : 12
Enregistré le : mer. 16 janv. 2008, 16:51:49
Localisation : Ancenis

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

Message 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

gom
Messages : 12
Enregistré le : mer. 16 janv. 2008, 16:51:49
Localisation : Ancenis

(sans texte)

Message 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:

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Ecart entre 2 dates

Message 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.
Christian Massé (Volubis.fr)

gom
Messages : 12
Enregistré le : mer. 16 janv. 2008, 16:51:49
Localisation : Ancenis

(sans texte)

Message 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".

luc.marionneau
Messages : 2
Enregistré le : lun. 22 sept. 2008, 10:06:59
Localisation : nantes

(sans texte)

Message par luc.marionneau »

Tes dates sont elles bien au format ISO ?

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

ecart entre deux dates

Message 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.
Christian Massé (Volubis.fr)

gom
Messages : 12
Enregistré le : mer. 16 janv. 2008, 16:51:49
Localisation : Ancenis

(sans texte)

Message 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:

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

fonction DATE

Message par cmasse »

C'est juste et c'est effectivement le seul moyen, sauf à écrire vos propres fonctions (UDF ou User Defined Functions)
Christian Massé (Volubis.fr)

gom
Messages : 12
Enregistré le : mer. 16 janv. 2008, 16:51:49
Localisation : Ancenis

(sans texte)

Message par gom »

C'est donc le seul moyen pour moi ! :lol:


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

Répondre