In PostgreSQL kunt u de to_char()
. gebruiken om een getal in een bepaald formaat uit te voeren, inclusief met een plus- of minteken om aan te geven of het een positief of negatief getal is.
Gebruik hiervoor een van de S
, MI
, PL
, of SG
in je format string.
Een andere optie is om PR
. te gebruiken om eventuele negatieve waarden tussen punthaken te plaatsen.
Sjabloonpatronen voor ondertekende nummers
De volgende sjabloonpatronen kunnen worden gebruikt om het juiste teken op het nummer toe te passen.
Patroon | Beschrijving |
---|---|
MI | Minusteken op gespecificeerde positie (indien cijfer <0). |
PL | Plusteken op gespecificeerde positie (indien nummer> 0). |
SG | Plus- of minteken op gespecificeerde positie, afhankelijk van of het getal positief of negatief is. |
S | Teken verankerd aan nummer (gebruikt landinstelling). |
PR | Hiermee worden eventuele negatieve waarden tussen punthaken geplaatst. |
Merk op dat MI
, PL
, of SG
zijn Postgres-extensies (het zijn geen standaard SQL).
Voorbeeld met S
Hier is een voorbeeld om de S
. te demonstreren patroon.
SELECT to_char(1, 'S9');
Resultaat:
+1
In dit geval is het getal positief en als ik mijn landinstelling gebruik, wordt het plusteken eraan toegevoegd.
Hier is het weer, maar met drie waarden; een positief, een negatief en nul.
SELECT
to_char(1, 'S9') AS "1",
to_char(-1, 'S9') AS "-1",
to_char(0, 'S9') AS "0";
Resultaat:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Voorbeeld met SG
Hier is hetzelfde voorbeeld met de SG
patroon.
SELECT
to_char(1, 'SG9') AS "1",
to_char(-1, 'SG9') AS "-1",
to_char(0, 'SG9') AS "0";
Resultaat:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Voorbeeld met MI
Dit is wat er gebeurt als ik SG
verwissel met MI
.
SELECT
to_char(1, 'MI9') AS "1",
to_char(-1, 'MI9') AS "-1",
to_char(0, 'MI9') AS "0";
Resultaat:
1 | -1 | 0 ----+----+---- 1 | -1 | 0
Alleen het negatieve getal krijgt het minteken. Het positieve getal en nul krijgen geen teken.
Voorbeeld met PL
Dit is de uitvoer op mijn systeem als ik PL
gebruik .
SELECT
to_char(1, 'PL9') AS "1",
to_char(-1, 'PL9') AS "-1",
to_char(0, 'PL9') AS "0";
Resultaat:
1 | -1 | 0 -----+-----+----- + 1 | -1 | + 0
Voorbeeld met PR
Dit is de uitvoer op mijn systeem als ik PR
gebruik .
SELECT
to_char(1, '9PR') AS "1",
to_char(-1, '9PR') AS "-1",
to_char(0, '9PR') AS "0";
Resultaat:
1 | -1 | 0 -----+-----+----- 1 | <1> | 0
Merk op dat PR
moet na komen 9
.
Dit gebeurt er als ik het voor 9
probeer te plaatsen :
SELECT
to_char(1, 'PR9') AS "1",
to_char(-1, 'PR9') AS "-1",
to_char(0, 'PR9') AS "0";
Resultaat:
ERROR: "9" must be ahead of "PR"
SG versus S
Het is je misschien opgevallen dat de voorbeelden met SG
en S
lijken hetzelfde resultaat te geven en vragen zich daarom af wat het verschil tussen beide is.
Het verschil is dat S
is verankerd aan het nummer terwijl SG
, MI
, PL
zijn niet.
S
gebruikt ook de landinstelling, dus het daadwerkelijke teken dat wordt gebruikt, hangt af van uw landinstelling.
Hier is een voorbeeld dat het verschil in verankering laat zien.
SELECT
to_char(1, 'S999') AS "S",
to_char(1, 'SG999') AS "SG";
Resultaat:
S | SG ------+------ +1 | + 1
En dit is wat er gebeurt als het aantal groter wordt.
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";
Resultaat:
S | SG | S | SG | S | SG ------+------+------+------+------+------ +1 | + 1 | +10 | + 10 | +100 | +100