[Résolu] [Oracle] Concatener champ date et champ time pour filtrer

Concatener champ date et champ time pour filtrer [Résolu] [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 26-05-2011 à 11:00:00    

Bonjour,
 
J'ai une table avec un champ "DAY_DATE" (format "DATE" ) et un champ "TIME" (format "TEXT" ). Il faudrait que je puisse faire des requetes sur cette table comme si mes 2 champs n'etaient qu'un seul champ au format "DATETIME". Le probleme est que je ne suis pas du tout specialiste des bases de donnees et encore moins sur Oracle.
 
Comment faire pour concatener ces 2 champs, tout en modifiant le format du champ "TIME" ?
 
Bonne journee,
Merci


Message édité par shooker le 01-06-2011 à 12:10:54
Reply

Marsh Posté le 26-05-2011 à 11:00:00   

Reply

Marsh Posté le 26-05-2011 à 16:19:04    

La concaténation se fait avec deux barres verticales ||
 
Essayer de faire une conversion vers une chaine de caractère avec to_char(), et comparer les chaines, ou bien convertir vers une date avec to_date() et comparer les dates.
 
Par exemple :

Select ...
From ...
Where to_char(DAY_DATE, 'YYYYMMDD')||TIME > '2011040112:15'

Reply

Marsh Posté le 26-05-2011 à 17:19:06    

Merci beaucoup pour votre aide.
 
Je n'ai pas le temps de tester aujourd'hui, je le ferais demain sans faute :)
 
Bonne soiree

Reply

Marsh Posté le 26-05-2011 à 17:39:46    

Dans Oracle, le type DATE peut aller jusqu'à la précision seconde : tu as de ce fait la possibilité de faire des comparaisons avec date et heure jusqu'à la seconde. Si tu veux aller en dessous de la seconde il faut utiliser le type TIMESTAMP
 
Concernant les comparaisons, il est très fortement conseillé de manipuler au format DATE et pas au format VARCHAR2 pour des raisons de rapidité
Du coup si tu veux comparer il est préférable de convertir ton heure au format DATE et de l'additionner avec ton champs qui contient la date
 
incide : utilise TO_DATE() et l'addition '+'

Reply

Marsh Posté le 01-06-2011 à 09:48:29    

Bonjour,
 
Je ne vois pas comment mettre mon filtre dans la clause WHERE.
Est ce que c'est du genre :
WHERE DAY_DATE + TO_DATE(TIME_DATE, 'HH24:MI') > '31/05/2011 16:00'  
 
J'ai essaye mais ca ne fonctionne pas, comment faut il faire ?
 
Merci

Reply

Marsh Posté le 01-06-2011 à 09:54:14    

pour comparer des dates il faut que toutes les données soient en date
convertir au format date ta chaîne '31/05/2011 16:00'  

Reply

Marsh Posté le 01-06-2011 à 10:23:29    

Alors je viens d'essayer en convertissant la seconde date, ca ne fonctionnait pas, j'ai donc essaye ceci :
 TO_DATE(DAY_DATE + TIME, 'DD/MM/YYYY HH24:MI') > TO_DATE('31/05/2011 06:00', 'DD/MM/YYYY HH24:MI')
 
Idem, voici l'erreur renvoye par Flex : [RPC Fault faultString="ociexecute(): ORA-01722: invalid number" faultCode="AMFPHP_RUNTIME_ERROR"

Reply

Marsh Posté le 01-06-2011 à 12:10:08    

Pour info, voici la solution :
TO_DATE(to_char(DAY_DATE,'DD/MM/YYYY')||' '||TIME, 'DD/MM/YYYY HH24:MI')

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed