[RESOLU] [SQL] Utilisation de champs dans un case CASE

Utilisation de champs dans un case CASE [RESOLU] [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 07-03-2007 à 14:06:01    

Bonjour,
 
j'ai un petit souci
 
j'ai un champ DATFIN qui contient une date  :D  
Je voudrais pouvoir utiliser ce champs pour faire des tests, sauf que quand il n'est pas renseigné sur l'application, il contient '01/01/0001'
je voudrais donc remplacer sa valeur par '31/12/2999' dans le cas où il serait à '01/01/0001' (et uniquement dans ce cas)
 
habitué à Access j'ai voulu faire un

Code :
  1. SELECT iif(DATFIN='01/01/0001' ; '31/12/2999' ; DATFIN) AS DATEFIN ...


visiblement sous Oracle iif ne passe pas sous Oracle
j'ai scruté le net pour trouver case :

Code :
  1. (case when DATFIN = '01/01/0001' then '31/12/2999' else DATFIN end) AS DATEFIN ...


Seulement il semble "tiquer" sur le DATFIN, comme si l'on pouvait seulement lui donner une valeur finie (du texte ou du numérique) mais pas un champs
 
des idées ?
 
d'avance merci !


Message édité par 4get9 le 07-03-2007 à 15:04:08
Reply

Marsh Posté le 07-03-2007 à 14:06:01   

Reply

Marsh Posté le 07-03-2007 à 14:16:35    

Sous Oracle, on utilise habituellement DECODE(champ, valeur_testée, resultat_si_vrai, resultat_si_faux)
Sous Oracle, on onvertit habituellement les dates que l'on utilise pour ne pas se faire avoir avec des format anglais ou avec les heures et les minutes à la fin des dates (ce qui semble être le problème ici).
 
 
Faire:

SELECT DECODE(to_char(DATFIN, 'dd/mm/aaaa'), '01/01/0001', '31/12/2999', to_char(DATFIN, 'dd/mm/aaaa'))  
 FROM ...;

Reply

Marsh Posté le 07-03-2007 à 14:31:06    

ok je regarde  
pour les dates pas de souci, j'ai tapé mon message sans tenir compte de ça  
sous PLSQL 'DD/MM/YYYY'  
et sous SQLPLUS 'YYYY-MM-DD'  :pt1cable:  
 
PS : merci !

Reply

Marsh Posté le 07-03-2007 à 15:03:27    

ça roule, j'ai par contre dû effectivement forcer le format pour ne pas avoir 2 formats différents.
 
Merci bcp !

Reply

Marsh Posté le 07-03-2007 à 15:04:54    

il vaut mieux comparer et injecter un
to_date ('2006-01-01','YYYY-MM-DD')
 
que directement passer un literal et le laisser convertir, car cela dépend de l'internationalisation

Reply

Marsh Posté le 07-03-2007 à 15:08:02    

j'ai tout mis en 'YYYY-MM-DD' vu que j'utilisait le test ">"

Reply

Sujets relatifs:

Leave a Replay

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