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