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

SQL Oracle Discussion :

Calcul années, mois, jours entre 2 dates


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 13
    Points
    13
    Par défaut Calcul années, mois, jours entre 2 dates
    Bonjour,

    J'ai 2 dates (date naissance, et décès) et je voudrais que mon select me retourne une chaine sous la forme "72 ans, 2 mois, 3 jours".
    J'ai beau chercher partout sur des forums et sur google je trouve rien, et je galère trop à essayer de le faire.
    J'ai testé un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t0.dtnaiss, t1.datedeces, floor((t1.datedeces-t0.dtnaiss)/365)
             || ' ans ' || (floor((t1.datedeces-t0.dtnaiss)/30)-floor((t1.datedeces-t0.dtnaiss)/365)*12)
             || ' mois ' || ((t1.datedeces-t0.dtnaiss)-(((floor((t1.datedeces-t0.dtnaiss)/30)-floor((t1.datedeces-t0.dtnaiss)/365)*12)*30)+(floor((t1.datedeces-t0.dtnaiss)/365)*365)))
             || ' jours ' time_difference
    Pour les jours seuls ça va, sinon je ne vois pas trop comment arriver à trouver le bon nombre de mois si je m'amuse à faire /30 vu que tous les mois n'ont pas le même nombre de jours. Et puis mon truc tombe pas juste je pense

    Merci pour votre aide !

  2. #2
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    La fonction MONTHS_BETWEEN devrait aider.
    Plus d'infos ici : http://sheikyerbouti.developpez.com/...age=Chap3#L3.4
    MONTHS_BETWEEN( date2, date1 )
    Nombre de mois qui séparent date2 de date1

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    ah merci je vais regarder ça

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t0.dtnaiss, t1.datedeces, trunc(MONTHS_BETWEEN(t1.datedeces,t0.dtnaiss)/12) as nb_ans, 
            trunc(MONTHS_BETWEEN(ADD_MONTHS(t1.datedeces,-(trunc(MONTHS_BETWEEN(t1.datedeces,t0.dtnaiss)/12)*12)),t0.dtnaiss)) as nb_mois, 
            (trunc(ADD_MONTHS(ADD_MONTHS(t1.datedeces, -(trunc(MONTHS_BETWEEN(t1.datedeces,t0.dtnaiss)/12)*12)),-trunc(MONTHS_BETWEEN(ADD_MONTHS(t1.datedeces,-(trunc(MONTHS_BETWEEN(t1.datedeces,t0.dtnaiss)/12)*12)),t0.dtnaiss)))-t0.dtnaiss)) as nb_jours

    Et voilà ! ça marche !!

    Par contre c'est super complexe, si quelqu'un trouve plus simple, je prend !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Que dites-vous de ce script-ci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH wrk_table AS
    (
    SELECT to_date('01/05/2009', 'dd/mm/yyyy') as start_dt, 
           to_date('08/01/2019', 'dd/mm/yyyy') as end_dt
      FROM dual
    )
    SELECT floor(months_between(end_dt, start_dt) / 12)                    as annees,
           floor(mod(months_between(end_dt, start_dt) ,12))                as mois,
           end_dt - add_months(start_dt, months_between(end_dt, start_dt)) as jours
      FROM wrk_table;
    Je crois qu'il a aussi l'avantage de donner des valeurs 100% fiables.
    Dites-moi si je me trompe.

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    Par défaut
    C'est quoi ce script ? C'est pas PL/SQL je crois ...

    Le WITH...AS...

    Si possible m'éclairer dessus. Merci.

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Points : 81
    Points
    81
    Par défaut
    Explication sur le mot clé SQL with

    http://www.oracle-developer.net/display.php?id=212

  8. #8
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Citation Envoyé par Hot_Abd Voir le message
    C'est quoi ce script ? C'est pas PL/SQL je crois ...

    Le WITH...AS...

    Si possible m'éclairer dessus. Merci.
    un "Oracle Certified Associate" qui ne connait pas le concept du WITH ?

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Peut-être un simple problème de version.

  10. #10
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    Par défaut
    Citation Envoyé par Vincent Rogier Voir le message
    un "Oracle Certified Associate" qui ne connait pas le concept du WITH ?
    Franchement j'en ai jamais vu. Peut être en OCP ?

    Je suis toujours étudiant

  11. #11
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Points : 132
    Points
    132
    Par défaut
    La clause WITH apparait dans l'examen Oracle SQL Expert et non pas dans le SQL Fundamentals I. Donc, s'il est DBA OCA 11g et qu'il n'a passé que les examens 1Z0-051 et 1Z0-052, cela peut avoir du sens de n'avoir jamais rencontré la clause WITH...

  12. #12
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Ma remarque ne visait pas vraiment les compétences de Hot_Abd... Faut bien commencer un jour.

    Ma remarque concernait plutôt son avatar... Car mettre comme avatar un logo officiel d'oracle OCA et ensuite venir poser la question "le WITH, c'est pas du PL/SQL, ca existe ??", je trouve qu'il y a un aspect cocasse dans cette contradiction.

    C'est plutot la mode de mettre en avant une certif en avatar alors que l'on ne maitrise pas forcément le sujet qui commence à me lasser quand je passe sur les différents forums.

    Un peu d'humilité....

    @hot_abdel : j’espère que tu a compris que la remarque ne te visais pas toi ou tes compétences mais l'utilisation du logo d'une certif

  13. #13
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    Par défaut
    Oui je comprends

    En tout cas, je suis certifié 10g et je suis jamais tomber dessus sur la documentation.

    J'avoue que je manque de pratique.

Discussions similaires

  1. Calcul de durée entre deux dates en années, mois, jours, heures, minutes, secondes et reste
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 02/10/2015, 12h31
  2. Calculer nombre de jours entre deux dates
    Par faty_br dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 11/03/2013, 16h15
  3. calcul nombre de jours entre deux dates
    Par charlene44 dans le forum Langage
    Réponses: 7
    Dernier message: 21/08/2012, 14h06
  4. Calcul Nombre De Jour Entre 2 Dates infopath2007
    Par syntony dans le forum InfoPath
    Réponses: 11
    Dernier message: 01/05/2007, 15h33
  5. [Dates] Calculer différence en jours entre deux dates
    Par looping2b2a dans le forum Langage
    Réponses: 4
    Dernier message: 29/12/2006, 23h32

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