Signe d'une valeur sur position fixe en sortie de requête - SQL/NoSQL - Programmation
Marsh Posté le 08-06-2005 à 16:48:14
Bon, la question est : quel SGBD utilises-tu ? 
 
Avec SQL Server, tu aurais un truc de ce genre : 
 
| Code : 
 | 
 
 
Mais ça sera très différent avec d'autres SGBD, ça reste donc la question importante.
Marsh Posté le 08-06-2005 à 16:52:20
La difficulté vient du fait que dans ma requête j'ai déjà l'utisation du CASE 
 
VAL= CASE CHAMP   
 WHEN '7' then right('-'+'00'+cast(CHAMP as varchar),4) 
 WHEN '8' then right('-'+'00'+cast(CHAMP as varchar),4) 
END 
 
dans ce cas comment y mettre ta solution (avec un second case) ? 
    
| Citation : select case sign(val)  | 
Marsh Posté le 08-06-2005 à 17:12:43
ha, ben met juste abs() autour de ton val, comme dans mon cas où j'avais du négatif 
Marsh Posté le 08-06-2005 à 17:19:35
si je mets ABS je n'obtiens que des valeurs absolues.  
J'ai besoin du signe + ou - suivi de 2 zéro puis la valeur exact : 
+001 ou -002 par exemple. 
Marsh Posté le 08-06-2005 à 18:54:48
Comprend rien à ton problème... 
 
On va faire simple : 
 
Tu as une variable "@flag" qui contient 7 ou 8. Si 7, alors "-" devant le nombre @val. Si 8 alors "+" devant le nombre @val. 
 
Le nombre @val doit sortir sous la forme "s000", c'est à dire 3 chiffres, 0 leading 0 compris, et le signe devant. 
 
Hypothèse 1 
On se moque du signe original de @val, c'est @flag qui prime. 
 
| Code : 
 | 
 
 
C'était ce que j'entendais par : 
| Arjuna a écrit : ha, ben met juste abs() autour de ton val, comme dans mon cas où j'avais du négatif  | 
 
 
Hypothèse 2 
On prend en compte le signe original de @val, c'est à dire que s'il est +, alors on utilise celui précisé par @flag, sinon on utilise l'opposé de @flag. 
 
| Code : 
 | 
 
 
Voilà, selon l'hypothèse, ça doit marcher.
Marsh Posté le 08-06-2005 à 19:01:04
J'y pense, toujours pour la dernière solution, un truc genre : 
 
| Code : 
 | 
 
 
Ca doit marcher aussi, et c'est "un peu plus" sexy 
Marsh Posté le 08-06-2005 à 16:36:26
L'objectif est d'obtenir quelquesoit le signe (+/-) une valeur en sortie sur position fixe comprenant le signe devant :
Ex:
right('-'+'00'+champ,4)
ok si la valeur n'est pas signée et que je force pour y mettre un - devant ca donne :
-001
right('-'+'00'+champ,4)
Par contre si la valeur est signée j'obtiens ce résultat au lieu de -001 :
+001
00-1