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

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    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 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
    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
    Points : 4 780
    Points
    4 780
    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)

  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
    Points : 4 926
    Points
    4 926
    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 habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    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
    Points : 4 926
    Points
    4 926
    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 habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    le plus propre serait de stocker les valeurs commes interval, voire number, et non comme varchar2

  9. #9
    Membre chevronné 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
    Points : 2 071
    Points
    2 071
    Par défaut
    ...Et moi la deuxième
    1) Le format attendu est directement lisible (et facilement modifiable)
    2) plus concise
    3) plus lisible !!!

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par laurentschneider
    le plus propre serait de stocker les valeurs commes interval, voire number, et non comme varchar2
    Elles sont stockée en number, ce sont les fichiers que l'ont reçoit qui intègrent des dates au format hh:mm:ss ou des dates en minutes.

    J'ai opté pour la seconde après reflexion, pour les mêmes raisons que Garuda

    Merci à tous

  11. #11
    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 Davboc
    Elles sont stockée en number, ce sont les fichiers que l'ont reçoit qui intègrent des dates au format hh:mm:ss ou des dates en minutes.

    J'ai opté pour la seconde après reflexion, pour les mêmes raisons que Garuda

    Merci à tous
    des dates en minutes c'est quoi? c'est des durées, non?

    et comme je l'ai dit, hh24:mi:ss ne permets pas de stocker des valeurs plus grandes que 23:59:59...

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    Oui ce sont des durées, c'est vrai que j'aurai pu être plus précis ^^

    Mais ces durées sont des durées d'émissions TV, donc on aura pas de problème avec les 24h, ils passeront jamais 24h non stop sans mettre de pub

  13. #13
    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
    oui, tu peux stocker en secondes alors. C'est vrai que INTERVAL a un inconvénient, tu ne peux pas sommer.

+ 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: 25/06/2015, 00h50
  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, 16h57
  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, 09h54
  4. Convertir champs au format Heure
    Par kamnouz dans le forum Développement
    Réponses: 1
    Dernier message: 16/04/2013, 12h06
  5. Intervalle heures au format TIME
    Par Anne1969 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 06/01/2006, 21h07

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