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 :

Intervalle en milli-secondes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut Intervalle en milli-secondes
    Salut à tous.
    Voila, je suis un peu une brèle en SQL, beaucoup en Oracle et je ne parviens pas à faire un bout de requête. J'aimerais savoir comment obtenir le nombre de milli-secondes séparant deux timestamp (par quelque moyen que ce soit).
    Merci d'avance.

    PS: oups, je viens de remarquer qu'il y a un sous-forum SQL pour Oracle, si un admin pouvait déplacer ce message...

  2. #2
    Membre émérite Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Par défaut
    Salut, tes timestamp tu les récupères comment?

  3. #3
    Membre émérite Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Par défaut
    Si tu veux comparer deux dates et avoir le résultat en milli seconde fait comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select (to_date('16/09/2008 14:30:00','DD/MM/YYYY HH24:MI:SS') - to_date('16/09/2008 14:25:00','DD/MM/YYYY HH24:MI:SS'))*24*3600*1000
    from dual

    *24 donne en jour
    *3600 donne en seconde
    *1000 donne en milli-seconde

  4. #4
    Membre émérite Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Par défaut
    Et si je n'ai pas répondu à ta question le lien suivant peut peut être t'aider

    ici

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    En fait c'est déjà résolu . Mais comme ça peut éventuellement servir à d'autre je donne une solution.

    Ta solution ne semble pas fonctionner avec des timestamp. La soustraction de deux timestamp donne un type interval day to second (depuis oracle 9 seulement je pense), chose qu'il est ridiculement difficile de convertir en nombre. La seule méthode que j'ai trouvé est barbare mais d'après tout ce que j'ai pu lire il n'y a que ça, ça consiste à utiliser cette fonction:
    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
    create or replace
    FUNCTION interval_to_seconds(x INTERVAL DAY TO SECOND ) RETURN NUMBER IS
    s VARCHAR2(26);
    days_s VARCHAR2(26);
    time_s VARCHAR2(26);
    days number;
    hours number;
    minutes number;
    seconds NUMBER;
    N NUMBER;
    BEGIN
      s := TO_CHAR(x);
      days_s := SUBSTR(s,2,INSTR(s,' ')-2);
      time_s := SUBSTR(s,2+LENGTH(days_s)+1);
      days := TO_NUMBER(days_s);
      hours := TO_NUMBER(SUBSTR(time_s,1,2));
      minutes := TO_NUMBER(SUBSTR(time_s,4,2));
      seconds := TO_NUMBER(SUBSTR(time_s,7),'99.999999');
     
      N := 86400*days + 3600*hours + 60*minutes + seconds;
      IF SUBSTR(s,1,1) = '-' THEN
         N := - N; 
      END IF;
      RETURN N; 
    END;

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Le type Oracle "DATE" ne gère pas les millisecondes ! Donc le code donnée aura une précision limité à la seconde.

    Citation Envoyé par Z3phur Voir le message
    Si tu veux comparer deux dates et avoir le résultat en milli seconde fait comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select (to_date('16/09/2008 14:30:00','DD/MM/YYYY HH24:MI:SS') - to_date('16/09/2008 14:25:00','DD/MM/YYYY HH24:MI:SS'))*24*3600*1000
    from dual
    *24 donne en jour
    *3600 donne en seconde
    *1000 donne en milli-seconde
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  7. #7
    Membre émérite Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Par défaut
    Merci pour la précision

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    On peut avoir une précision au 1/100 ème de seconde par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    v1 := DBMS_UTILITY.GET_TIME;
    ...
    v2 := DBMS_UTILITY.GET_TIME;
    DBMS_OUTPUT.PUT_LINE( (v2-v1)); -- donne le nb de 1/100s

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

Discussions similaires

  1. Intervalle entre deux dates en secondes
    Par lllhuhdklll dans le forum PL/SQL
    Réponses: 11
    Dernier message: 11/11/2012, 12h58
  2. Intervalle date en seconde
    Par alex_972 dans le forum SQL
    Réponses: 14
    Dernier message: 07/11/2011, 14h39
  3. [AC-2007] Faire des Moyennes à partir d'intervalles de X secondes
    Par Vertica dans le forum Access
    Réponses: 1
    Dernier message: 06/01/2010, 21h57
  4. [Mail] Mail() limit d'envoi et intervalles secondes
    Par thibotus01 dans le forum Langage
    Réponses: 1
    Dernier message: 03/05/2006, 13h34

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