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