SQL fonction conversion vers date - SQL/NoSQL - Programmation
Marsh Posté le 18-08-2004 à 15:12:07
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 ?
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
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
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
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.
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...
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.
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....
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;
Marsh Posté le 18-08-2004 à 17:19:41
T'as rien de plus compliquer ?
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...
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.
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....
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
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
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.