I PostgreSQL kan du bruge to_char()
at udskrive et tal i et bestemt format, inklusive med et plus- eller minustegn for at angive, om det er et positivt eller negativt tal.
For at gøre dette skal du bruge en af S
, MI
, PL
eller SG
i din formatstreng.
En anden mulighed er at bruge PR
for at omslutte eventuelle negative værdier i vinkelparenteser.
Skabelonmønstre for signerede numre
Følgende skabelonmønstre kan bruges til at anvende det relevante tegn på tallet.
Mønster | Beskrivelse |
---|---|
MI | Minustegn i specificeret position (hvis nummer <0). |
PL | Plustegn i specificeret position (hvis nummer> 0). |
SG | Plus- eller minustegn i specificeret position, afhængigt af om tallet er positivt eller negativt. |
S | Sign forankret til nummer (bruger lokalitet). |
PR | Dette omslutter eventuelle negative værdier inden for vinkelparenteser. |
Bemærk, at MI
, PL
eller SG
er Postgres-udvidelser (de er ikke standard SQL).
Eksempel ved brug af S
Her er et eksempel til at demonstrere S
mønster.
SELECT to_char(1, 'S9');
Resultat:
+1
I dette tilfælde er tallet positivt, og ved at bruge min lokalitet er plustegnet sat foran det.
Her er det igen, men med tre værdier; en positiv, en negativ og nul.
SELECT
to_char(1, 'S9') AS "1",
to_char(-1, 'S9') AS "-1",
to_char(0, 'S9') AS "0";
Resultat:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Eksempel ved brug af SG
Her er det samme eksempel med SG
mønster.
SELECT
to_char(1, 'SG9') AS "1",
to_char(-1, 'SG9') AS "-1",
to_char(0, 'SG9') AS "0";
Resultat:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Eksempel på brug af MI
Her er, hvad der sker, hvis jeg bytter SG
med MI
.
SELECT
to_char(1, 'MI9') AS "1",
to_char(-1, 'MI9') AS "-1",
to_char(0, 'MI9') AS "0";
Resultat:
1 | -1 | 0 ----+----+---- 1 | -1 | 0
Kun det negative tal får minustegnet. Det positive tal og nul får ikke noget tegn.
Eksempel ved brug af PL
Her er outputtet på mit system, når jeg bruger PL
.
SELECT
to_char(1, 'PL9') AS "1",
to_char(-1, 'PL9') AS "-1",
to_char(0, 'PL9') AS "0";
Resultat:
1 | -1 | 0 -----+-----+----- + 1 | -1 | + 0
Eksempel ved brug af PR
Her er outputtet på mit system, når jeg bruger PR
.
SELECT
to_char(1, '9PR') AS "1",
to_char(-1, '9PR') AS "-1",
to_char(0, '9PR') AS "0";
Resultat:
1 | -1 | 0 -----+-----+----- 1 | <1> | 0
Bemærk, at PR
skal komme efter 9
.
Her er hvad der sker, hvis jeg prøver at sætte det før 9
:
SELECT
to_char(1, 'PR9') AS "1",
to_char(-1, 'PR9') AS "-1",
to_char(0, 'PR9') AS "0";
Resultat:
ERROR: "9" must be ahead of "PR"
SG vs. S
Du har måske bemærket, at eksemplerne bruger SG
og S
ser ud til at give det samme resultat, og spekulerer derfor på, hvad forskellen er mellem dem.
Forskellen er, at S
er forankret til nummeret, mens SG
, MI
, PL
er ikke.
S
bruger også lokaliteten, så det faktiske tegn, der bruges, afhænger af din lokalitet.
Her er et eksempel, der viser forankringsforskellen.
SELECT
to_char(1, 'S999') AS "S",
to_char(1, 'SG999') AS "SG";
Resultat:
S | SG ------+------ +1 | + 1
Og her er, hvad der sker, efterhånden som antallet vokser sig større.
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";
Resultat:
S | SG | S | SG | S | SG ------+------+------+------+------+------ +1 | + 1 | +10 | + 10 | +100 | +100