Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2143 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Signe d'une valeur sur position fixe en sortie de requête

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Signe d'une valeur sur position fixe en sortie de requête

n°1112882
systemanag​er
Posté le 08-06-2005 à 16:36:26  profilanswer
 

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  
 

mood
Publicité
Posté le 08-06-2005 à 16:36:26  profilanswer
 

n°1112903
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-06-2005 à 16:48:14  profilanswer
 

Bon, la question est : quel SGBD utilises-tu ?
 
Avec SQL Server, tu aurais un truc de ce genre :
 

Code :
  1. select case sign(val)
  2.   when -1 then '-' + right('0000' + cast(val as varchar), 4)
  3.   when 0 then ' ' + right('0000' + cast(val as varchar), 4)
  4.   when 1 then '+' + right('0000' + cast(abs(val) as varchar), 4)
  5.   end


 
Mais ça sera très différent avec d'autres SGBD, ça reste donc la question importante.

n°1112910
systemanag​er
Posté le 08-06-2005 à 16:52:20  profilanswer
 

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)
         when -1 then '-' + right('0000' + cast(val as varchar), 4)  
         when 0 then ' ' + right('0000' + cast(val as varchar), 4)  
         when 1 then '+' + right('0000' + cast(abs(val) as varchar), 4)  
         end


Message édité par systemanager le 08-06-2005 à 16:53:21
n°1112954
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-06-2005 à 17:12:43  profilanswer
 

ha, ben met juste abs() autour de ton val, comme dans mon cas où j'avais du négatif :)

n°1112968
systemanag​er
Posté le 08-06-2005 à 17:19:35  profilanswer
 

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.

n°1113082
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-06-2005 à 18:54:48  profilanswer
 

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 :
  1. select case @flag
  2.        when 7 then '-' + right('000' + cast(abs(@val) as varchar), 3) 
  3.        when 8 then '+' + right('000' + cast(abs(@val) as varchar), 3) 
  4.        end


 
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 :
  1. select case @flag
  2.        when 7 then
  3.        (
  4.            case sign(@val)
  5.            when 1 then "-"
  6.            when 0 then "+" -- si c'est 0, alors c'est forcément le signe +
  7.            when -1 then "+"
  8.            end
  9.        )
  10.        + right('000' + cast(abs(@val) as varchar), 3) 
  11.        when 8 then
  12.        (
  13.            case sign(@val)
  14.            when 1 then "+"
  15.            when 0 then "+"
  16.            when -1 then "-"
  17.            end
  18.        )
  19.        + right('000' + cast(abs(@val) as varchar), 3)
  20.        end


 
Voilà, selon l'hypothèse, ça doit marcher.


Message édité par Arjuna le 08-06-2005 à 18:55:30
n°1113094
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-06-2005 à 19:01:04  profilanswer
 

J'y pense, toujours pour la dernière solution, un truc genre :
 

Code :
  1. select case sign((@flag - 7.5) * @val)
  2.        when 1 then '+' + right('000' + cast(abs(@val) as varchar), 3)
  3.        when 0 then '+' + right('000' + cast(abs(@val) as varchar), 3)
  4.        when -1 then '-' + right('000' + cast(abs(@val) as varchar), 3)


 
Ca doit marcher aussi, et c'est "un peu plus" sexy :)


Message édité par Arjuna le 08-06-2005 à 19:01:14

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Signe d'une valeur sur position fixe en sortie de requête

 

Sujets relatifs
requete qui retourne un max[Résolu] recuperation valeur menu déroulant
[MySQL] Pb de requete UPDATE très lentecomment inclure une requete sql dans une balise a<a href> et en php...
[Résolu] Désactiver la notification d'exécution de requête SQLLongueur fixe en sortie d'une requête
Requete sqlvaleur null dans une base
Plus de sujets relatifs à : Signe d'une valeur sur position fixe en sortie de requête


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR