encore un pb de date!!

encore un pb de date!! - SQL/NoSQL - Programmation

Marsh Posté le 10-06-2008 à 15:30:22    

bonjour, j'ai encore un pb de date et je commence à tourner en rond.
dans ma base, j'ai une colonne de type date de format --> 05-JUN-08    (5 juin 2008 et j'ai fait un sysdate pour la remplir)
 
je dois faire un test sur cette date et pour cela je voudrai soustraire 5 jour de cette date
du genre SELECT.. FROM.. WHERE ..  AND (maTable.datej =  (SYSDATE - 5) ;  pb, ça ne me renvoie rien..
Quelqu'un aurait il une idée?
merci d'avance

Reply

Marsh Posté le 10-06-2008 à 15:30:22   

Reply

Marsh Posté le 10-06-2008 à 15:41:53    

j'ai oublié de préciser qu'il s'agissait d'un oracle..

Reply

Marsh Posté le 10-06-2008 à 15:56:13    

c'est parce sous oracle que le type DATE comporte également l'heure à la seconde près
fais un

Code :
  1. SELECT TO_CHAR(datej, 'DD/MM/YYYY HH:24:MI:SS') FROM taTable

et tu comprendras


Message édité par couak le 10-06-2008 à 15:59:21
Reply

Marsh Posté le 10-06-2008 à 17:24:36    

d'accord, mais comment peut on contourner le pb?
et pourquoi en apparence mes dates sont au format "05-JUN-08"?

Reply

Marsh Posté le 10-06-2008 à 17:39:16    

soweto93 a écrit :

d'accord, mais comment peut on contourner le pb?


bah essaie de chercher un peu, c'est pas trop compliqué, tu peux utiliser TO_CHAR ou bien encore BETWEEN
 

soweto93 a écrit :

et pourquoi en apparence mes dates sont au format "05-JUN-08"?

parce que si ta variable d'environnement ou de session NLS_DATE_FORMAT n'est pas définie, par défaut tu auras 'DD/MON/RR'
Si tu n'aimes pas tu peux mettre à 'DD/MM/RRRR HH:24:MI:SS'
La doc oracle est assez complète

Reply

Marsh Posté le 11-06-2008 à 15:26:38    

select to_date(sysdate,'DD-MM-YY') - to_date(datej,'DD-MM-YY') from ctrl_event
 
me renvoie des jours entiers, je vais me débrouiller avec ça!
merci !

Reply

Marsh Posté le 11-06-2008 à 15:50:09    

sinon y a trunc() qui est fait pour ca

Reply

Marsh Posté le 11-06-2008 à 16:51:52    

c'est quoi que tu veux faire exactement, je ne comprends pas tout

Reply

Marsh Posté le 11-06-2008 à 17:18:59    

en gros j'ai une date dans ma table, et je veux dans une clause "where" rajouter le test suivant --> where maDate= sysdate -  1
 
Je vais aller voir si le trunc() peut m'aider..
 
merci pour votre aide!

Reply

Marsh Posté le 11-06-2008 à 17:29:50    

et donc tu veux faire une comparaison avec une précision "JOUR" et pas à la seconde comme le type DATE te le permet
Donc tu as plusieurs solutions et je t'avais donnée comme piste TO_CHAR et BETWEEN
Version TO_CHAR :

Code :
  1. select * from maTable where to_char(datej, 'DD/MM/YYYY')=to_char(sysdate-1, 'DD/MM/YYYY')


Après je ne pense pas que cela soit optimal car ca passe par 2 conversions en chaines de caractères avant de faire une comparaison
 
Tu peux chercher un peu pour la solution BETWEEN qui est sympa à connaître

Reply

Marsh Posté le 11-06-2008 à 17:29:50   

Reply

Marsh Posté le 12-06-2008 à 10:24:55    

c'est bon , j'ai résolu mon pb. en fait je n'avais pas compris qu'on pouvais choisir le format de la date à l'extraction de celle ci de la table.
 
to_date(sysdate,'DD-MM-YY') - to_date(datej,'DD-MM-YY') me renvoie bien le nombre de jour qui sépare ces 2 dates. par contre couak a raison, c'est pas optimal comme solution mais ça fonctionne.  
 
j'ai creusé pour le between mais sans succés. j'ai vu qu'il y existait un between_month...  
 
le trunc() aurait pu me servir en deuxieme recours, car il m'aurait renvoyé 5 au lieu de 5.425684556.
 
merci à vous en tous cas, le tout étant d'avoir le choix dans la date !
 
bye ++
 
 

Reply

Sujets relatifs:

Leave a Replay

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