I PostgreSQL kan du använda to_char()
för att mata ut ett tal i ett visst format, inklusive med ett plus- eller minustecken för att indikera om det är ett positivt eller negativt tal.
För att göra detta, använd en av S
, MI
, PL
, eller SG
i din formatsträng.
Ett annat alternativ är att använda PR
för att omge eventuella negativa värden inom vinkelparenteser.
Mallmönster för signerade nummer
Följande mallmönster kan användas för att applicera lämpligt tecken på numret.
Mönster | Beskrivning |
---|---|
MI | Minustecken i angiven position (om nummer <0). |
PL | Plustecken i angiven position (om nummer> 0). |
SG | Plus- eller minustecken i angiven position, beroende på om siffran är positiv eller negativ. |
S | Signa förankrat till nummer (använder språk). |
PR | Detta omsluter alla negativa värden inom vinkelparenteser. |
Observera att MI
, PL
, eller SG
är Postgres-tillägg (de är inte standard SQL).
Exempel med S
Här är ett exempel för att demonstrera S
mönster.
SELECT to_char(1, 'S9');
Resultat:
+1
I det här fallet är siffran positiv och därför läggs plustecknet på det med min lokalitet.
Här är den igen, men med tre värden; ett positivt, ett negativt och noll.
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
Exempel med SG
Här är samma exempel 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
Exempel med MI
Så här händer om jag byter 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
Endast det negativa talet får minustecknet. Det positiva talet och nollan får inga tecken.
Exempel med PL
Här är utdata på mitt system när jag använder 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
Exempel med PR
Här är utdata på mitt system när jag använder 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
Observera att PR
måste komma efter 9
.
Här är vad som händer om jag försöker sätta det före 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 kanske har märkt att exemplen använder SG
och S
verkar ge samma resultat och undrar därför vad skillnaden är mellan dem.
Skillnaden är att S
är förankrat till numret medan SG
, MI
, PL
är inte.
S
använder också lokalen, så det faktiska tecknet som används beror på din lokalitet.
Här är ett exempel som visar förankringsskillnaden.
SELECT
to_char(1, 'S999') AS "S",
to_char(1, 'SG999') AS "SG";
Resultat:
S | SG ------+------ +1 | + 1
Och här är vad som händer när antalet växer 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