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