Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
537 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Récupération et calculs sur dates

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle] Récupération et calculs sur dates

n°1657626
colonelhat​i
Posté le 13-12-2007 à 12:12:08  profilanswer
 

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... :sweat:  
 
Merci d'avance de votre aide!
 

mood
Publicité
Posté le 13-12-2007 à 12:12:08  profilanswer
 

n°1657657
olivthill
Posté le 13-12-2007 à 12:56:51  profilanswer
 

Essayer !

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 la_table t1, la_table t2
 where t1.ID = 10
   and t2.ID = 11
   and t2.clef = t1.clef


Message édité par olivthill le 16-12-2007 à 11:37:32
n°1657752
colonelhat​i
Posté le 13-12-2007 à 14:42:30  profilanswer
 

Merci de cette réponse!
 
Je viens d'essayer ceci:

Code :
  1. Select to_date(  to_number(to_date(t1.val, 'dd/mm/yyyy hh24:mi:ss'))
  2.                + to_number(to_date(t2.val, 'mi')),
  3.                'dd/mm/yyyy hh24:mi:ss')
  4.   from prm
  5. where t1.id = '99609'
  6.     and t2.id = '99610'


 
sans succès:

Code :
  1. ORA-00904: "T2"."ID": identificateur invalide


 
Si quelqu'un a une idée...
 
Merci :)

n°1657807
olivthill
Posté le 13-12-2007 à 15:53:21  profilanswer
 

Comme il y a deux enregistrements différents pour la même table il faut utiliser le from que j'avais mis où les alias t1 et t2 permettent de distinguer les deux enregistrements :

 from prm t1, prm t2

n°1657821
colonelhat​i
Posté le 13-12-2007 à 16:18:36  profilanswer
 

Merci de ton aide :)
 
Je viens de lancer ceci:

Code :
  1. Select to_date(  to_number(to_date(t1.val, 'dd/mm/yyyy hh24:mi:ss'))
  2.                + to_number(to_date(t2.val, 'mi')),
  3.                'dd/mm/yyyy hh24:mi:ss')
  4.   from prm t1, prm t2
  5. where t1.id = '10'
  6.   and t2.id = '11'


 
mais j'ai cette erreur:

Code :
  1. ORA-01722: nombre non valide


 
Doit y avoir un problème au niveau du calcul non?

n°1658317
MagicBuzz
Posté le 14-12-2007 à 14:08:41  profilanswer
 

je pige pas trop le coup des to_number...
 
à quoi il servent ? :heink:

n°1658319
MagicBuzz
Posté le 14-12-2007 à 14:16:15  profilanswer
 

Code :
  1. SELECT to_number(sysdate) FROM dual;


=> Sur une 10gR2 en tout cas, ça passe pas, j'ai la même erreur.
 
En revanche :

Code :
  1. SELECT sysdate + INTERVAL '30' MINUTE FROM dual;


Ca marche.
 
Je ne vous le faire pas dire, c'est absolument horrible comme syntaxe.
Mais bon, Oracle c'est tellement de la merde que c'est pas une surprise...
 
Voici une référence assez utile :
http://www.psoug.org/reference/date_func.html

n°1658321
MagicBuzz
Posté le 14-12-2007 à 14:21:10  profilanswer
 

A noter aussi que...
 

Code :
  1. SELECT to_number(to_char(to_date('30', 'MI'), 'YYYYMMDDHH24MISS')) FROM dual;


 


20071201003000


 
Quand je dis que c'est de la merde...

n°1658370
casimimir
Posté le 14-12-2007 à 15:13:16  profilanswer
 

ceci dit
 

Code :
  1. select sysdate + (30/1440)
  2. from dual


 
marche aussi pour rajouter 30 mins
 
pour l'histoire du 20071201003000 ca ne m'étonne pas plus que ca, est ce qu'il y a un sgbd qui retourne réellement un truc cohérent? y devrait juste thrower une exception pour oracle a la limite.


Message édité par casimimir le 14-12-2007 à 15:13:31
n°1658469
MagicBuzz
Posté le 14-12-2007 à 17:12:02  profilanswer
 

Sous SQL Server, ça te crée une date 01/01/0000 00:30:00
Du moins il me semble (c con, là j'ai pas de SQL Server sous la main pour tester...)
 
Ce qui est la logique même...
 
Au pire, il devrait retourner un truc du genre 01/01/1970 00:30:00 puisque sur la plupart des systèmes la date "zéro" correspond au 01/01/1970 00:00:00 (et null à 31/12/1969 23:59:59)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Récupération et calculs sur dates

 

Sujets relatifs
TELECHARGER ORACLE 9IAS GRATUITEMENTproblème de connexion oracle 9i
oracle : create table avec plusieurs références facultativesN'afficher que les 3 dernières dates d'une requête
Include et récupération de variables[Oracle - Débutant] Exporter le résultat d'une requête dans un fichier
acceder a forms et report 6i (oracle) via un lien urlprobléme avec recupération de variable GET avec URL rewrite
Récupération variable d'adresse $_GET phpOracle / OCI / Fonctionnement d'OCI-Lob
Plus de sujets relatifs à : [Oracle] Récupération et calculs sur dates


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR