PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Ajouter un signe plus/moins à un nombre dans PostgreSQL

Dans PostgreSQL, vous pouvez utiliser le to_char() pour afficher un nombre dans un certain format, y compris avec un signe plus ou moins pour indiquer s'il s'agit d'un nombre positif ou négatif.

Pour ce faire, utilisez l'un des S , MI , PL , ou SG dans votre chaîne de format.

Une autre option consiste à utiliser PR afin de mettre toutes les valeurs négatives entre crochets.

Modèles de modèle pour les nombres signés

Les modèles de modèles suivants peuvent être utilisés pour appliquer le signe approprié au nombre.

Modèle Description
MI Signe moins à la position spécifiée (si nombre <0).
PL Signe plus à la position spécifiée (si nombre> 0).
SG Signe plus ou moins dans la position spécifiée, selon que le nombre est positif ou négatif.
S Signe ancré au numéro (utilise les paramètres régionaux).
PR Cela inclut toutes les valeurs négatives entre crochets.

Notez que MI , PL , ou SG sont des extensions Postgres (ce ne sont pas du SQL standard).

Exemple utilisant S

Voici un exemple pour démontrer le S motif.

SELECT to_char(1, 'S9');

Résultat :

+1

Dans ce cas, le nombre est positif et donc en utilisant mes paramètres régionaux, le signe plus y est ajouté.

Le revoilà, mais avec trois valeurs; un positif, un négatif et zéro.

SELECT 
  to_char(1, 'S9') AS "1",
  to_char(-1, 'S9') AS "-1",
  to_char(0, 'S9') AS "0";

Résultat :

 1  | -1 | 0  
----+----+----
 +1 | -1 | +0

Exemple utilisant SG

Voici le même exemple avec le SG motif.

SELECT 
  to_char(1, 'SG9') AS "1",
  to_char(-1, 'SG9') AS "-1",
  to_char(0, 'SG9') AS "0";

Résultat :

 1  | -1 | 0  
----+----+----
 +1 | -1 | +0

Exemple utilisant MI

Voici ce qui se passe si j'échange SG avec MI .

SELECT 
  to_char(1, 'MI9') AS "1",
  to_char(-1, 'MI9') AS "-1",
  to_char(0, 'MI9') AS "0";

Résultat :

 1  | -1 | 0  
----+----+----
  1 | -1 |  0

Seul le nombre négatif obtient le signe moins. Le nombre positif et le zéro ne reçoivent aucun signe.

Exemple utilisant PL

Voici la sortie sur mon système lorsque j'utilise PL .

SELECT 
  to_char(1, 'PL9') AS "1",
  to_char(-1, 'PL9') AS "-1",
  to_char(0, 'PL9') AS "0";

Résultat :

  1  | -1  |  0  
-----+-----+-----
 + 1 |  -1 | + 0

Exemple utilisant PR

Voici la sortie sur mon système lorsque j'utilise PR .

SELECT 
  to_char(1, '9PR') AS "1",
  to_char(-1, '9PR') AS "-1",
  to_char(0, '9PR') AS "0";

Résultat :

  1  | -1  |  0  
-----+-----+-----
  1  | <1> |  0 

Notez que PR doit venir après 9 .

Voici ce qui se passe si j'essaie de le mettre avant 9 :

SELECT 
  to_char(1, 'PR9') AS "1",
  to_char(-1, 'PR9') AS "-1",
  to_char(0, 'PR9') AS "0";

Résultat :

ERROR:  "9" must be ahead of "PR"

SG contre S

Vous avez peut-être remarqué que les exemples utilisant SG et S semblent produire le même résultat et se demandent donc quelle est la différence entre eux.

La différence est que S est ancré au nombre alors que SG , MI , PL ne le sont pas.

S utilise également les paramètres régionaux, de sorte que le signe réel utilisé dépendra de vos paramètres régionaux.

Voici un exemple qui illustre la différence d'ancrage.

SELECT 
  to_char(1, 'S999') AS "S",
  to_char(1, 'SG999') AS "SG";

Résultat :

  S   |  SG  
------+------
   +1 | +  1

Et voici ce qui se passe lorsque le nombre augmente.

SELECT 
  to_char(1, 'S999') AS "S",
  to_char(1, 'SG999') AS "SG",
  to_char(10, 'S999') AS "S",
  to_char(10, 'SG999') AS "SG",
  to_char(100, 'S999') AS "S",
  to_char(100, 'SG999') AS "SG";

Résultat :

  S   |  SG  |  S   |  SG  |  S   |  SG  
------+------+------+------+------+------
   +1 | +  1 |  +10 | + 10 | +100 | +100