SQL fonction conversion vers date

SQL fonction conversion vers date - SQL/NoSQL - Programmation

Marsh Posté le 18-08-2004 à 14:49:19    

J'ai un calcul à faire sur une date, en sql seulement (c'est pas cool, mais j'ai pas le choix) pour cela je m'abondonne à quelques conversions

Citation :

select to_number(to_char(to_date(DATE_COM,'DD/MM/YY HH24:MI:SS'),'SSSSS'))
from IMPORT_TAXATION_4760
where rownum = 1


 
renvoi 86399 donc c'est cool
 
Le probleme c'est  

Citation :

select to_date(to_number(to_char(to_date(DATE_COM,'DD/MM/YY HH24:MI:SS'),'SSSSS')),'HH24/MI/SS')
from IMPORT_TAXATION_4760
where rownum = 1


 
Il me dit que l'heure doit etre comprise entre 0 et 23.
 
Quelqu'un peut m'aider ?
Merci d'avance.

Reply

Marsh Posté le 18-08-2004 à 14:49:19   

Reply

Marsh Posté le 18-08-2004 à 15:12:07    

:heink:
 
select to_char(to_date(DATE_COM,'DD/MM/YY HH24:MI:SS'),'HH24/MI/SS')
from IMPORT_TAXATION_4760  
where rownum = 1
 
Ca marche pas ça ?

Reply

Marsh Posté le 18-08-2004 à 15:22:03    

Excuse, c'était pas clair.
Je veux soustaire une durée à une date.
Apres l'avoir passée en seconde, je fait mon calcul : c'est ok.
Mais c'est au moment de la reconversion en format date que ca bloque.
Voila l'ecriture complete :
select to_date(
    to_char(to_date(DATE_COM,'DD/MM/YY HH24:MI:SS'),'sssss')  
  - to_char(to_date(DUREE,'HH24:MI:SS'),'sssss')
    ,'DD/MM/YY HH24:MI:SS')
from IMPORT_TAXATION_4760
where rownum = 1

Reply

Marsh Posté le 18-08-2004 à 15:28:09    

En fait voila, j'ai une date au format 'DD/MM/YY HH24:MI:SS'
(18/08/04 15:25:36) et une durée en 'SSSSS' (112).
Et je veux faire la difference : la date - la durée,
et avoir un format final 'DD/MM/YY HH24:MI:SS'
(18/08/04 15:23:44).
Le tout en SQL. Voila voila  

Reply

Marsh Posté le 18-08-2004 à 15:37:35    

Ca va ça ?
 
select to_char(to_date(to_number(to_char(sysdate, 'SSSSS')) - 500, 'SSSSS'), 'DD/MM/YY HH24:MI:SS') from dual

Reply

Marsh Posté le 18-08-2004 à 16:04:32    

Oui, c'est bon ca.
Mais le probleme c'est qu'on à plus la date.
Mais c'est bon quand meme je vais faire un concat.
Merci.

Reply

Marsh Posté le 18-08-2004 à 16:20:14    

Bonjour.
si je peux me permettre une remarque : si la durée à soustraire est trop importante, on doit passer au jour précédent ce qui n'est pas le cas ici. tout dépend de ce que tu veux...

Reply

Marsh Posté le 18-08-2004 à 16:59:28    

J'ai vu, mais je sais pas trop comment m'y prendre.
Si t'as une idée, je suis preneur.
 
Encore merci pour la reponse de Arjuna.

Reply

Marsh Posté le 18-08-2004 à 17:02:20    

je viens d'essayer ca et ca marche ! heu...j'espère que c'est sous Oracle.... :D  
j'ai pris sysdate à la place de ton champ et j'ai soustrait une durée de 3600secondes (j'ai aussi essayé avec plus...)
Sachant qu'on ne peut avoir plus de 86400 secondes dans une journée :
 
select decode(sign(to_number(to_char(to_date(sysdate,'DD/MM/YYYY HH24:MI:SS'),'SSSSS'))-3600),0,trunc(sysdate),1,to_char(trunc(sysdate),'DD/MM/YYYY')||to_char(to_date(to_number(to_char(to_date(sysdate,'DD/MM/YYYY HH24:MI:SS'),'SSSSS'))-3600,'SSSSS'),'HH24:MI:SS'),to_char(trunc(sysdate)-1,'DD/MM/YYYY')||to_char(to_date(to_number(to_char(to_date(sysdate,'DD/MM/YYYY HH24:MI:SS'),'SSSSS'))-3600+86400,'SSSSS'),'HH24:MI:SS')) from dual;

Reply

Marsh Posté le 18-08-2004 à 17:19:41    

T'as rien de plus compliquer ? :D
 
Je pense qu'on peut s'en tirer d'une façon bien plus simple en récupérant autrechose que SSSSS, mais le nombre de ms depuis le 01/01/1900, normalement Oracle a une fonction qui retourne ça. A partir de là, ça résoud tous les problèmes, à moins que tu gères des données aussi vieilles que ça...

Reply

Marsh Posté le 18-08-2004 à 17:19:41   

Reply

Marsh Posté le 18-08-2004 à 17:50:34    

Heu, et bien bravo
j'ai compris, et ca marche.
Je pense que je ne l'aurai pas trouvé.
Je connaissais pas "decode", maintenant si.
Merci beaucoup.

Reply

Marsh Posté le 19-08-2004 à 09:48:16    

ouais, y'avait moyen de faire plus simple, mais comme on est parti d'une durée en secondes, j'ai pas trop cherché plus loin.... :D

Reply

Sujets relatifs:

Leave a Replay

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