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 :

convertir heure au format hh:mm:ss en secondes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Par défaut convertir heure au format hh:mm:ss en secondes
    Bonjour

    Je réalise un script d'import de fichier (en PL/SQL)
    Lors de la lecture du fichier, je lis une heure au format hh:mm:ss que je récupère sous forme de chaîne de caractère.

    Je souhaiterais convertir cette heure en secondes afin de l'enregistrer en tant que number(5)
    Savez-vous si une fonction existe pour cela ?

    Merci pour vos réponses !

    David

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rbaraer@Ora10g> select to_char(to_date('12:28:37', 'HH24:MI:SS'), 'SSSSS') from dual;
     
    TO_CH
    -----
    44917
     
    rbaraer@Ora10g>
    Le principe est de convertir en date grâce à TO_DATE puis de convertir en nombre de secondes depuis le début d la journée grâce à TO_CHAR et le format 'SSSSS'.

    Si vous souhaitez le stocker en NUMBER(5), un petit TO_NUMBER évitera une conversion implicite .

    Y-a-t-il une bonne raison pour ne pas stocker cette information dans un champ DATE ?

    Cordialement,

    rbaraer

  3. #3
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Par défaut
    Salut,
    Je ne sais pas si il existe une fonction mais je le calculerais ainsi
    (to_number(substr(txt,1,2))*3600) + (to_number(substr(txt,4,2))*60)+ to_number(substr(txt,7,2)
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  4. #4
    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
    ça dépend si tu acceptes des valeurs de plus de 24h

    au choix
    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
     
    select 
      to_char(to_date('12:34:00','HH24:MI:SS'),'SSSSS') 
    from dual;
     
    45240
     
    select 
      extract(day from interval '123:45:00' hour to second)*86400+
      extract(hour from interval '123:45:00' hour to second)*3600+
      extract(minute from interval '123:45:00' hour to second)*60+
      extract(second from interval '123:45:00' hour to second)
    from dual;
     
    445500

  5. #5
    Membre éclairé Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Par défaut
    Wow c'est du rapide !

    Merci beaucoup pour vos réponses !

    Je stocke les durées en seconde pour effectuer des traitement ensuite d'une part (c'est plus facile d'additionner deux nombres que deux chaines ^^) et d'autre part j'ai différents fichiers et dans certains la durée est stockée en minutes...

    Voilà le pourquoi du comment...

    Merci !

  6. #6
    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
    bon, tu peux toujours additioner des intervales

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select interval '12:34:56' hour to second + interval '10' minute from dual;
    +00 12:44:56.000000

  7. #7
    Membre éclairé Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Par défaut
    Lequel pensez vous être le plus propre, et le plus efficace entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (to_number(substr(txt,1,2))*3600) + (to_number(substr(txt,4,2))*60)+ to_number(substr(txt,7,2)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_number(to_char(to_date('12:28:37', 'HH24:MI:SS'), 'SSSSS'))
    A vue de nez je dirais le premier mais...

  8. #8
    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
    le plus propre serait de stocker les valeurs commes interval, voire number, et non comme varchar2

  9. #9
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    ...Et moi la deuxième
    1) Le format attendu est directement lisible (et facilement modifiable)
    2) plus concise
    3) plus lisible !!!

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

Discussions similaires

  1. [AC-2010] Comment convertir une heure au format AM/PM en format 24 heures ?
    Par silhouette dans le forum Access
    Réponses: 2
    Dernier message: 24/06/2015, 23h50
  2. [CR 10] Heure dans format chaîne à convertir en nombre
    Par leloup84 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 31/07/2014, 15h57
  3. [bash] convertir l'heure en format hexadecimal en format lisible 00:00:00
    Par starway dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 28/08/2013, 08h54
  4. Convertir champs au format Heure
    Par kamnouz dans le forum Développement
    Réponses: 1
    Dernier message: 16/04/2013, 11h06
  5. Intervalle heures au format TIME
    Par Anne1969 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 06/01/2006, 20h07

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