Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2007, 12h34   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 1
Points : 1
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!
romrom1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 12h50   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 215
Points : 4 215
Déjà : Transforme ta valeur date (val de id=10) en une date Oracle
Code :
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 :
TO_DATE(val, 'dd/mm/yyyy hh24:mm:ss') + x_minutes / 60 / 24 = nouvelle date.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 12h56   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 1
Points : 1
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 :
TO_DATE(SELECT val FROM prm WHERE id='10', 'dd/mm/yyyy hh24:mm:ss')
Merci encore!
romrom1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 13h48   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 215
Points : 4 215
Gné ?

Code :
1
2
3
SELECT TO_DATE(val, 'dd/mm/yyyy hh24:mm:ss') 
FROM prm 
WHERE id='10'
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h41   #5
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 1
Points : 1
Je viens d'essayer ceci:
Code :
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 :
1
2
 
ORA-00904: "T2"."ID": identificateur invalide
Si quelqu'un a une idée, je suis preneur...

Merci
romrom1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h48   #6
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Citation:
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 !!!!
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h49   #7
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
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.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 16h02   #8
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 1
Points : 1
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 :
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...
romrom1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 16h06   #9
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
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 ?
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 16h14   #10
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 1
Points : 1
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!
romrom1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 16h38   #11
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Tu rajoutes tout simplement un jour (ou une fraction de jour) à une date !!!
(pas besoin de TO_NUMBER et autre TO_CHAR)
Code :
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
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 16h44   #12
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 1
Points : 1
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 :
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 :
ORA-01722: nombre non valide
Doit y avoir une erreur dans le calcul...
romrom1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 16h47   #13
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
Citation:
Envoyé par romrom1 Voir le message
Code :
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.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 17h10   #14
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
C'est pourtant pas compliqué !!!!
Code :
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'
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 17h16   #15
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 1
Points : 1
En enlevant les 2 to_number, j'ai une erreur:
Code :
ORA-00975: l'opération DATE+DATE n'est pas autorisée
romrom1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 17h22   #16
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
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 :
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'
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 09h34   #17
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 1
Points : 1
Bonjour,

ça y est:

Code :
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
romrom1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h30.


 
 
 
 
Partenaires

Hébergement Web