IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

[Sql]Comment trouver la différence en jours entre 2 dates ?


Sujet :

DB2

  1. #1
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut [Sql]Comment trouver la différence en jours entre 2 dates ?
    Le titre est parlant.

    Comment trouver la différence en jour entre 2 dates sous DB2 ?

    La soustraction ne marche pas: elle retourne une mantisse jour/mois/année)
    La soustraction de 2 dayofyear() ne marche pas si à cheval sur 2 années
    La soustraction de dayofyear() couplé à year() ne macrhe pas à cause des années bissextiles
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  2. #2
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Avril 2003
    Messages : 288
    Points : 165
    Points
    165
    Par défaut
    Salut,

    J'ai exactement le même problème ... je galère depuis plusieurs semaine alors que c'est si simple sous Oracle !!!

    Si je trouve, je te fais signe

    ++

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    J'ai essayé la requête suivante sur DB2/400 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select date('2006-01-02') - date('2005-12-29')
    from sysibm.sysdummy1
    ;
    Et j'obtiens 4 comme résultat.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par Gwellañ
    J'ai essayé la requête suivante sur DB2/400 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select date('2006-01-02') - date('2005-12-29')
    from sysibm.sysdummy1
    ;
    Et j'obtiens 4 comme résultat.

    Tu y es presque Gwellañ .
    Par contre, j'ai testé avec le 01/02/2000 et 01/03/2000..et ca me retourne 100

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT days(current date) - days(date('01/12/2005')) FROM ... --> Me retourne 5
     
    // Prise en compte des années bissextiles ?
    SELECT days(date('01/03/2000')) - days(date('28/02/2000')) FROM ...--> Me retourne 2

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Il y a effectivement un problème sur date(x) - date(y). Vicieux même !
    A partir du moment où il y a plus d'un mois d'écart le résultat semble délirant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select date('2005-12-06') - date('2005-11-10')
    from sysibm.sysdummy1
    ;
    Résultat = 26

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select date('2005-12-06') - date('2005-10-01')
    from sysibm.sysdummy1
    ;
    Résultat = 205

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select date('2005-12-06') - date('2005-01-01')
    from sysibm.sysdummy1
    ;
    Résultat = 1105

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select date('2005-12-06') - date('2004-01-01')
    from sysibm.sysdummy1
    ;
    Résultat = 11105

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select date('2005-12-06') - date('1905-01-01')
    from sysibm.sysdummy1
    ;
    Résultat = 1001105

    En fait :
    les chiffres des dizaines et des unités correspondent au nombre de jours d'écart.
    les chiffres des milliers et des centaines correspondent au nombre de mois d'écart.
    les autres chiffres correspondent au nombre d'année d'écart.

    Je vois la question initiale sous un autre angle. J'avais compris que la soustraction de date donnait une date en résultat...

    Et effectivement, lorsqu'on utilise la fonction days sur une date le résultat correspond à celui attendu.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2002
    Messages : 72
    Points : 1 063
    Points
    1 063
    Par défaut
    Comme cela ça marche non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select days('2007-01-01') - days('2006-01-01') 
    from sysibm/dummy      donne 365
     
    select days('2006-02-01') - days('2006-01-01')
    from sysibm/dummy      donne 31
     
    select days('2006-02-11') - days('2006-01-01')
    from sysibm/dummy      donne 41           
     
    select days('2005-12-06') - days('2005-01-01') 
    from sysibm/dummy      donne 339
    Ancien rédacteur Java/J2EE ,C++Builder

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Gwellañ
    Et effectivement, lorsqu'on utilise la fonction days sur une date le résultat correspond à celui attendu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] obtenir la différence en jours entre deux dates sql
    Par toma03 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/06/2007, 12h20
  2. [VB.NET 2005 XE]calculer la différence en jours entre 2 dates ?
    Par kinganasius dans le forum Windows Forms
    Réponses: 1
    Dernier message: 04/04/2007, 15h00
  3. [Dates] Calculer différence en jours entre deux dates
    Par looping2b2a dans le forum Langage
    Réponses: 4
    Dernier message: 29/12/2006, 23h32
  4. Réponses: 2
    Dernier message: 29/05/2006, 19h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo