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

Oracle Discussion :

différence entre date ?


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 118
    Points : 65
    Points
    65
    Par défaut différence entre date ?
    bonjour,
    est ce que je peut faire la différence entre les années de deux dates pour obtenir l'age ?
    merci

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    oui, il suffit de faire une recherche sur le forum pour plus d'info

    ou la FAQ : http://oracle.developpez.com/faq/?page=3-2#datediff

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par jessy212
    bonjour,
    est ce que je peut faire la différence entre les années de deux dates pour obtenir l'age ?
    merci
    moi j'aime bien employer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    trunc((to_char(d,'SYYYYMMDD') - to_char(date_de_naissance,'SYYYYMMDD'))/10000)
    car ça marche même pour ceux qui sont nés le dernier jour du mois de février

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est bon ça

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par Fred_D
    c'est bon ça
    En effet !

    J'ajouterais aussi des TO_NUMBER pour éviter toute conversion de type implicite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TRUNC((TO_NUMBER(TO_CHAR(d,'SYYYYMMDD')) - TO_NUMBER(TO_CHAR(date_de_naissance,'SYYYYMMDD'))) / 10000)
    Qu'en pensez-vous ?

    rbaraer

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Bonjour,
    Pourquoi diviser par 10000 ?

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par solange44
    Bonjour,
    Pourquoi diviser par 10000 ?
    ex
    20060929 - 19710322 = 350607

    350607 / 10000 = 35

    j'ai donc 35 ans.

    j'aurais aussi pu faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select trunc(to_number(to_char(sysdate,'SYYYY.MMDD'),'9999.9999')
     - to_number(to_char(date '1971-03-22','SYYYY.MMDD'),'9999.9999')) AGE 
    from dual;
     
           AGE
    ----------
            35
    ce qui est éventuellement plus lisible

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Une autre solution :
    select round((TO_NUMBER(TO_CHAR(Madate1,'J')) - TO_NUMBER(TO_CHAR(Madate2,'J'))) / 365)
    from Matable1

    Moi mon problème c'est que ça marche très bien qd je lance la requête sur un client ORACLE (Eclipse pr ma part) mais lorsque je fais ma requête dans un module java avec hibernate, ça ne fonctionne pas.
    Après avoir bidouiiler ma requête , j'ai l'impression que c'est le TRUNC et le ROUND qu'hibernate n'aime pas.

    Alors si quelqu'un pouvait me confirmer mon diagnostic
    Merci

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    chère solange,
    ma solution a le grand avantage sur MONTHS_BETWEEN(D1,D2)/12 de gérer les personnes qui sont nées le dernier jour du mois de février. si tu divises par 365, toute personne agée de 4 ans aura son anniversaire un jour trop top, non?

    tout de bon
    laurent

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Bjr Laurent,
    Effectivement ta solution est la plus logique (je la garde précieusement). Le pb c'est que ni l'une ni l'autre ne passe dans mon programe java. Le problème est autre,C'est pourquoi , j'ai créé une autre discussion sur le forum java.
    http://www.developpez.net/forums/showthread.php?t=217044

    Merci Bcp

Discussions similaires

  1. Différence entre dates au format "Year Month Day"
    Par TheCaribouX dans le forum C#
    Réponses: 11
    Dernier message: 04/02/2009, 20h35
  2. [BO XIr2] Tests sur des différences entre dates
    Par Enthau dans le forum Deski
    Réponses: 4
    Dernier message: 27/07/2007, 10h49
  3. différence entre date sytème et date du bios
    Par zoheir13 dans le forum Delphi
    Réponses: 1
    Dernier message: 05/05/2007, 19h28
  4. Différence entre Date et Date()
    Par Gabout dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/04/2007, 16h32
  5. calcul différence entre dates
    Par igour dans le forum Access
    Réponses: 2
    Dernier message: 18/01/2007, 11h30

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