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 :

Soustraction de date


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut Soustraction de date
    Bonjour a vous,

    je débute sous oracle et j'aurai une question pour vous

    j'ai dans une table deux champs "date" ,le champ dt_deb, et dt_fin

    je souhaiterais mettre dans une autre table la différence de minute entre les deux date.

    Pour cela j'ai fait ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         select dt_deb into dtdeb from histo_vent where cd_vent = vent and dt_fin is null;
     
         dtfin := to_date(SYSDATE,'DD/MM/YYYY HH24:MI:SS'); 
     
         update histo_vent set dt_fin = dtfin where cd_vent = vent and dt_fin is null;
         commit;
     
         select nb_temps into nbtemps from cumul_vent where cd_vent = vent;
     
         update cumul_vent set nb_temps = (nbtemps + to_number(to_char(dtfin - dtdeb, 'MI'))) where cd_vent = vent;
         commit;
    la derniére ligne de ce code ne fonctionne pas et j'ai comme erreur de retour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01722: Nombre non valide
    si quelqu'un aurait une idée pourquoi j'obtient cette erreur ou alors dite moi si je m'y prend vraiment mal :/

    merci d'avance

  2. #2
    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
    Tu t'y prend mal :
    Une différence de date te donne un nombre (nombre de jour entre ces 2 dates avec les décimales)
    Donc faire un to_char avec un format 'MI' ne peut pas marcher, vu que c'est un nombre et pas une date.

    Donc faut multiplier la différence par 24 pour avoir des heures, puis par 60 pour avoir de minutes.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    merci pour ta réponse rapide

    je vais tester

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    je vien de tester ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         update cumul_vent set nb_temps = (nbtemps + (((dtfin - dtdeb)*24)*60)) where cd_vent = vent;
    je n'ai plus d'erreur mais rien ne change dans ma table :/

    j'utilise une procédure stocké, y'a t'il une possibilité de rentrer en débug dans celle-ci ?

  5. #5
    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
    non, mais fait le select suivant pour vérifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select nb_temps , nbtemps + ((dtfin - dtdeb)*24*60) as new_nbtemps
    FROM cumul_vent 
    where cd_vent = vent;

  6. #6
    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
    J'avais pas vérifié le début de ta requete :
    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
    SELECT dt_deb INTO dtdeb 
    FROM histo_vent WHERE cd_vent = vent 
    AND dt_fin IS NULL;
         
    dtfin := TO_DATE(SYSDATE,'DD/MM/YYYY HH24:MI:SS'); 
    C'est faux : Il ne faut pas faire un TO_DATE d'une DATE.
    le format d'une date n'est QUE visuel (ou pour mettre dans du VARCHAR)
    dtfin := SYSDATE;
    
    UPDATE histo_vent 
    SET dt_fin = dtfin 
    WHERE cd_vent = vent 
    AND dt_fin IS NULL;
    COMMIT;
       
    SELECT nb_temps INTO nbtemps 
    FROM cumul_vent 
    WHERE cd_vent = vent;
    => A moins d'utiliser nbtemps ailleurs, c'est inutile
    
    UPDATE cumul_vent
    SET nb_temps = NVL(nb_temps,0) +  24 * 60 * (dtfin - dtdeb) 
    WHERE cd_vent = vent;
    Rajout d'un NVL au cas où nb_temps est NULL (NULL + x vaut toujours NULL)
    
    COMMIT;

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

Discussions similaires

  1. soustraction de date
    Par lazzeroni dans le forum Oracle
    Réponses: 4
    Dernier message: 04/07/2006, 12h27
  2. [Dates] Soustraction...de date
    Par BenoitDenis dans le forum Langage
    Réponses: 7
    Dernier message: 24/04/2006, 13h48
  3. [Dates] Soustraction de date en php
    Par o_live dans le forum Langage
    Réponses: 1
    Dernier message: 28/11/2005, 15h25
  4. arrondir un nombre découlant d'une soustraction de date
    Par bertrand_declerck dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2005, 13h51
  5. Problème de soustraction de date
    Par remika dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/07/2005, 14h51

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