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 :

Récupération et calculs sur les dates


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Récupération et calculs sur les dates
    Bonjour à tous,

    je viens vous demander de l'aide car mes connaissances en Oracle sont très limitées, je débarque dessus et je suis bloqué pour un problème qui peut paraitre bête...

    Voici une description simplifiée de mon problème. J'ai une table PRM, contenant les champs ID et VAL. Une de mes entrée (avec l'ID 10 par exemple) contient une date (format: dd/mm/yyyy hh24:mm:ss), une autre entrée (avec l'ID 11) contient un nombre entier représentant un temps en minute. Je dois prendre ma date, y ajouter mon nombre de minutes et vérifier que le résultat est supérieur ou inférieur à la date du système...

    On m'a dit que cela était faisable en Oracle avec to_date mais je nage complètement...

    Merci d'avance de votre aide!

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Déjà : Transforme ta valeur date (val de id=10) en une date Oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_DATE(val, 'dd/mm/yyyy hh24:mm:ss')
    Ensuite on peut ajouter un nb de jour à une date.
    Donc il faut transformer ton nombre de minute en jour (60 minutes par heure, 24 h par jour) .

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_DATE(val, 'dd/mm/yyyy hh24:mm:ss') + x_minutes / 60 / 24 = nouvelle date.

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci de cette réponse rapide

    Par contre comment puis-je remplacer la valeur val dans ma requête?

    J'ai essayé cette requête mais sans succès:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_DATE(select val from prm where id='10', 'dd/mm/yyyy hh24:mm:ss')
    Merci encore!

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Gné ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TO_DATE(val, 'dd/mm/yyyy hh24:mm:ss') 
    FROM prm 
    WHERE id='10'

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je viens d'essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select to_date(  to_number(to_date(t1.val, 'dd/mm/yyyy hh24:mi:ss'))
                   + to_number(to_date(t2.val, 'mi')),
                   'dd/mm/yyyy hh24:mi:ss')
      from prm
    where t1.id = '10'
       and t2.id = '11'
    mais sans succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-00904: "T2"."ID": identificateur invalide
    Si quelqu'un a une idée, je suis preneur...

    Merci

  6. #6
    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
    SELECT to_date( to_number(to_date(t1.val, 'dd/mm/yyyy hh24:mi:ss'))
    + to_number(to_date(t2.val, 'mi')),
    'dd/mm/yyyy hh24:mi:ss')
    FROM prm
    WHERE t1.id = '10'
    AND t2.id = '11'
    houlala !
    Pour que ca marche il faudrait que T1 et T2 (cad des tables) soient dans ton FROM !!!!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par romrom1 Voir le message
    Si quelqu'un a une idée, je suis preneur...
    Pourquoi ne pas jeter un oeil dans un cours de SQL ? Il y en a sur http://www.developpez.com/ justement !!!
    Tes T1 et T2 ne sont pas défini dans ta clause FROM, on ne sait pas ce que c'est ni d'où ils viennent.

  8. #8
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Jai bien compris que mon erreur venait de là, mais je ne comprends pas comment faire pour réaliser ce que je veux...

    J'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ----------------------------------------
    |                   PRM                 |
    ----------------------------------------
    |       ID        |          VAL        |
    ----------------------------------------
    |      10         | 10/10/2000 00:00:00 |
    ----------------------------------------
    |      11         |         60          |
    -----------------------------------------
    Et je veux savoir si ma date 10/10/2000 00:00:00 a laquelle j'ajoute 60 minutes se trouve avant ou après ma date système. Et franchement je piétine...

  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
    Tu piétines vite !!!
    Pour comparer une date à la date système
    Et quand ta date est supérieur à ta date système tu fais quoi ?

  10. #10
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Garuda Voir le message
    Et quand ta date est supérieur à ta date système tu fais quoi ?
    Ben je voudrais le savoir c'est tout! Ca me permet de savoir si le paramètre enregistré à la date x avec un temps de validité de y minutes est encore valable.

    Comment faire pour calculer "mydate" dans mon cas?

    Merci de votre aide!

  11. #11
    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
    Tu rajoutes tout simplement un jour (ou une fraction de jour) à une date !!!
    (pas besoin de TO_NUMBER et autre TO_CHAR)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    -- pour rajouter un heure
    Select ma_date+1/24 FROM ...
    -- pour rajouter 12 mn
    Select ma_date+12/60/24 FROM ....
    -- exemple
    Select SYSDATE+1/24 FROM DUAL
    Select SYSDATE+12/60/24 FROM DUAL
    -- avec un nombre de minutes variable
    Select SYSDATE+:x/60/24 FROM DUAL

  12. #12
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je ne peux pas faire ça car le temps que je dois ajouter à ma date est un paramètre stocké dans ma base de données.

    Je viens d'essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select to_date(  to_number(to_date(t1.val, 'dd/mm/yyyy hh24:mi:ss'))
                   + to_number(to_date(t2.val, 'mi')),
                   'dd/mm/yyyy hh24:mi:ss')
      from prm t1, prm t2
    where t1.id = '10'
       and t2.id = '11'
    ce qui me semblait mieux mais maintenant j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01722: nombre non valide
    Doit y avoir une erreur dans le calcul...

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par romrom1 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_number(to_date(t1.val, 'dd/mm/yyyy hh24:mi:ss'))
    Tu convertis une date en number et c'est pas possible
    Pour manipuler des dates, tu n'as pas besoin de faire de conversion.

  14. #14
    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
    C'est pourtant pas compliqué !!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select  t1.val +t2.val/60/24
      from prm t1, prm t2
    where t1.id = '10'
       and t2.id = '11'

  15. #15
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    En enlevant les 2 to_number, j'ai une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00975: l'opération DATE+DATE n'est pas autorisée

  16. #16
    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
    Donc T2.val est au format DATE (don ce n'est pas un nombre contrairement à ce que tu as dit dans ton premier post ) !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT   t1.val
           + TO_NUMBER (TO_CHAR (t2.val, 'HH24')) / 24
           + TO_NUMBER (TO_CHAR (t2.val, 'MI')) / 60 / 24
      FROM prm t1, prm t2
     WHERE t1.ID = '10' AND t2.ID = '11'

  17. #17
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    ça y est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT to_date( t1.val, 'dd/mm/yyyy hh24:mi:ss')
                  + t2.val/(60*24)
    FROM prm t1, prm t2
    WHERE t1.id = '10'
      AND t2.id = '11'
    Merci de votre aide

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

Discussions similaires

  1. calcul sur les dates
    Par housni dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/08/2007, 16h38
  2. Oracle 10g - calcul sur les dates
    Par themateo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/08/2007, 10h50
  3. Calcul sur les dates
    Par Stargate SG1 dans le forum Access
    Réponses: 2
    Dernier message: 04/02/2007, 16h09
  4. [Dates] Calcul sur les dates...
    Par gawelldanor dans le forum Langage
    Réponses: 10
    Dernier message: 04/04/2006, 11h07
  5. [C#] Calcul sur les dates avec des DateTimePicker
    Par alizee971 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2005, 17h14

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