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 :

Date, timestamp, conversions et arrondis


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut Date, timestamp, conversions et arrondis
    Bonjour,

    Je vais essayer d'exposer clairement (c'est pas gagné...) mon problème...

    A la base j'ai deux colonnes OPENDATETIME et CLOSEDATETIME de type DATE qui pour donner une exemple concret pourrait contenir ceci :

    OPENDATETIME :11/12/2009 12:05:56 PM
    CLOSEDATETIME : 11/12/2009 12:09:08 PM

    Mon but est d'avoir une durée (correspondant à CLOSEDATETIME - OPENDATETIME) en minutes. Quand je dis en minutes c'est uniquement les minutes et sans arrondis. Dans le cas ci-dessus ca devrait donc faire 03 (soit 3 minutes). Je précise que dans le cas ou il y aurait un écart de plus d'une heure les heures doivent également être convertis en minutes. Ce qui veut dire que si ma durée est par exemple de 01:23 (HH:MI) je souhaiterais avoir 83.

    J'ai réussi à récupérer la durée précise au format timestamp (DD-MM-RRRR HH24:MI:SS) par cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    to_timestamp(to_char(closedatetime,'DD-MM-RRRR HH24:MI:SS'),'DD-MM-RRRR HH24:MI:SS') - to_timestamp(to_char(opendatetime,'DD-MM-RRRR HH24:MI:SS'),'DD-MM-RRRR HH24:MI:SS')
    J'ai également réussi à avoir cette durée en minutes mais j'ai un arrondis et je ne sais pas trop si cela va fonctionner lorsque j'aurais des heures car je n'ai pas encore de données dans la base me permettant de faire ce test. J'ai pu faire cela grace à cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    to_timestamp(to_char(closedatetime,'MI'),'MI') - to_timestamp(to_char(opendatetime,'MI'),'MI'),
    Mais comme je l'ai dit j'ai déjà un problème car il y a un arrondis qui de plus n'est pas très logique qui il se fait par excès... dans mon premier exemple dont la durée est 03:12 (MI:SS) cela me donne 04:00 et pas 03:00 !!!

    Donc j'aimerais savoir comment faire pour ne pas avoir cette saloperie d'arrondis !!! ou éventuellement une autre solution plus efficace pour arriver à mes fins.

    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Par défaut
    'Extract ' ne tient compte que des chiffres representant ce qu'on lui demande.

    un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    select
    extract(hour FROM
    (
    to_timestamp
    (
    to_char(to_date('04-03-2010 18:05:18','DD-MM-YYYY HH24:MI:SS'),'DD-MM-YYYY HH24:MI:SS')
    ,'DD-MM-YYYY HH24:MI:SS'
    )
    -
    to_timestamp
    (
    to_char(to_date('04-03-2010 16:02:17','DD-MM-YYYY HH24:MI:SS'),'DD-MM-YYYY HH24:MI:SS')
    ,'DD-MM-YYYY HH24:MI:SS'
    )
    )
    )*60
    +
    extract(minute FROM
    (
    to_timestamp
    (
    to_char(to_date('04-03-2010 18:05:18','DD-MM-YYYY HH24:MI:SS'),'DD-MM-YYYY HH24:MI:SS')
    ,'DD-MM-YYYY HH24:MI:SS'
    )
    -
    to_timestamp
    (
    to_char(to_date('04-03-2010 16:02:17','DD-MM-YYYY HH24:MI:SS'),'DD-MM-YYYY HH24:MI:SS')
    ,'DD-MM-YYYY HH24:MI:SS'
    )
    )
    )
    from dual
    Date 1 = 18:05:18
    Date 2 = 16:02:17
    Resultat = 123

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ROUND(86400*(closedatetime - opendatetime)/60)
    Rachid A.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Bonne réponse, mais convertir en secondes pour reconvertir en minutes il y a une opération en trop.

    Sachez qu'une différence entre deux dates donne le résultat en nombre de jours, si vous multipliez par 24 vous l'avez donc en nombre d'heures, remultipliez par 60 vous l'avez en nombre de minutes.

    À vous de choisir si vous voulez ce nombre de façon arrondie ou tronquée.
    Si le résultat était 3.75 minutes, voulez-vous voir 3 ou 4 minutes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ROUND(closedatetime - opendatetime)*24*60),
           TRUNC(closedatetime - opendatetime)*24*60)

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Comme vous voyez nul besoin de passer par une conversion de type en timestamp.
    La différence de deux dates est aussi un intervalle donc une autre solution possible est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Select extract(day from ds) * 24 * 60 + extract (hour from ds) * 60 + extract (minute from ds)
    from(
          Select (closedatetime - opendatetime) Day to second ds
            From (
                    Select to_date('11/12/2009 12:05:56','DD/MM/YYYY HH24:MI:SS') OPENDATETIME, 
                           to_date('12/12/2009 14:09:08','DD/MM/YYYY HH24:MI:SS') CLOSEDATETIME
                    from dual
                  )
    )

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Après une recherche longue et intensive dans la base de donnée j'ai finalement pu trouver un champs qui contenait directement la durée que je recherchais en seconde (la conversion étant plus que facile...) ca m'a donc beaucoup simplifié les choses... Mais j'ai tout de même testé les solutions que vous m'avez proposé et elles fonctionnent parfaitement ! je les gardes donc bien au chaud car je il y a de fortes chances pour qu'elles me soient utiles un de ces jours.D'ailleurs je ne connaissais même pas la fonction extract().

    Merci pour votre aide

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

Discussions similaires

  1. Conversion date timestamp
    Par omelhor dans le forum Langage
    Réponses: 2
    Dernier message: 28/06/2010, 19h18
  2. Outil manipulation/conversion de date/timestamp
    Par Maxow dans le forum Mon site
    Réponses: 0
    Dernier message: 25/06/2010, 13h37
  3. Conversion Date -> timestamp
    Par badi082 dans le forum Général Java
    Réponses: 3
    Dernier message: 30/01/2008, 11h02
  4. Conversion date (timestamp)
    Par flipper203 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 26/10/2006, 15h30
  5. conversion date timestamp vers date mysql
    Par seb0026 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/10/2005, 19h48

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