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 :

Decimal en heure:minute


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut Decimal en heure:minute
    Bonjour à tous,

    voilà mon problème. J'aimerai convertir un champ qui stock de l'information (en decimal) en temps.

    J'ai fait quelque chose d'horrible du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select
    CASE WHEN ABS(MOD(A.END_BAL,1))>0 THEN
      TO_CHAR(TRUNC(A.END_BAL)) || ':' || LPAD(TO_CHAR(ROUND(ABS(MOD(A.END_BAL,1))*60/100,2)*100),2,'0')
     ELSE
      TO_CHAR(TRUNC(A.END_BAL))
     END
    from dual
    Malheureusement, ça ne marche pas pour les nombre négatifs du genre -0.5 -> -0h30 (ou -0:30).

    Voilà un jeu de test pour être sur que l'on se comprend bien

    Decimal heure
    0.5 0:30
    140.75 140:45
    -0.5 -0:30
    -145.25 -145:15
    13 13
    -34 -34

    Merci infiniment pour vos réponse.

  2. #2
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select 
      extract(day from numtodsinterval(-145.25,'HOUR'))*24+
      extract(hour from numtodsinterval(-145.25,'HOUR'))
      ||':'||
      abs(extract(minute from numtodsinterval(-145.25,'HOUR')))
    from dual

  3. #3
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut
    Merci pour cette solution, mais elle ne marche pas pour -0.5, car elle donne 0:30 et non pas -0:30 .... et 13 devient 13:0 au lieu de 13 voir 13:00 ....

    Je n'arrive pas à comprendre pourquoi oracle n'a pas prévu une function pour convertir ces deux "types", c'est presque impensable...

    Une autre idée?

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Par défaut
    laurentschneider a bien débrousaillé le chemin

    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
    with donneeReq as
    (select 0.5 as nb from dual union all
    select 140.75 from dual union all
    select -0.5 from dual union all
    select -145.25 from dual union all
    select 13 from dual union all
    select -1 from dual union all
    select -0.99999 from dual union all
    select -34 from dual
    )
    select
    nb,
    CASE
    WHEN nb > -1 and nb < 0 THEN
      '-'
     END
      ||
      to_char(
      extract(day FROM numtodsinterval(nb,'HOUR'))*24+
      extract(hour FROM numtodsinterval(nb,'HOUR'))
      )
      ||
    CASE
    WHEN abs(extract(minute FROM numtodsinterval(nb,'HOUR'))) != 0 THEN
      ':'||to_char(abs(extract(minute FROM numtodsinterval(nb,'HOUR'))))
     END
     
    FROM donneeReq
    edit: suppression des else vide

  5. #5
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut
    Impeccable, ça marche très bien. Merci beaucoup pour vos réponses.

    Mais je trouve toujours bizarre que les gens de chez oracle n'ait pas conçu une fonction de conversion....

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

Discussions similaires

  1. Conversion minutes vers Jour:Heure:minute
    Par jaq dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/09/2009, 17h01
  2. Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/11/2005, 13h43
  3. [Dates] Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 08h34
  4. Conversion heures minutes en heures centièmes
    Par shaman262 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/10/2005, 17h53
  5. Formater une durée sous la forme Heure:Minute:Seconde
    Par marsupile dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/01/2004, 23h29

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