In PostgreSQL können Sie to_char()
verwenden um eine Zahl in einem bestimmten Format auszugeben, einschließlich mit einem Plus- oder Minuszeichen, um anzuzeigen, ob es sich um eine positive oder negative Zahl handelt.
Verwenden Sie dazu einen der S
, MI
, PL
, oder SG
in deinem Formatstring.
Eine weitere Option ist die Verwendung von PR
um negative Werte in spitze Klammern einzuschließen.
Vorlagenmuster für vorzeichenbehaftete Nummern
Die folgenden Vorlagenmuster können verwendet werden, um das entsprechende Vorzeichen auf die Nummer anzuwenden.
Muster | Beschreibung |
---|---|
MI | Minuszeichen an angegebener Stelle (falls Zahl <0). |
PL | Pluszeichen an angegebener Position (wenn Zahl> 0). |
SG | Plus- oder Minuszeichen an angegebener Position, je nachdem, ob die Zahl positiv oder negativ ist. |
S | An Zahl verankertes Zeichen (verwendet Gebietsschema). |
PR | Dies schließt alle negativen Werte in spitze Klammern ein. |
Beachten Sie, dass MI
, PL
, oder SG
sind Postgres-Erweiterungen (sie sind kein Standard-SQL).
Beispiel mit S
Hier ist ein Beispiel zur Veranschaulichung des S
Muster.
SELECT to_char(1, 'S9');
Ergebnis:
+1
In diesem Fall ist die Zahl positiv und daher wird ihr in meinem Gebietsschema das Pluszeichen vorangestellt.
Hier ist es wieder, aber mit drei Werten; ein Positiv, ein Negativ und eine Null.
SELECT
to_char(1, 'S9') AS "1",
to_char(-1, 'S9') AS "-1",
to_char(0, 'S9') AS "0";
Ergebnis:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Beispiel mit SG
Hier ist dasselbe Beispiel mit SG
Muster.
SELECT
to_char(1, 'SG9') AS "1",
to_char(-1, 'SG9') AS "-1",
to_char(0, 'SG9') AS "0";
Ergebnis:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Beispiel mit MI
Folgendes passiert, wenn ich SG
vertausche mit MI
.
SELECT
to_char(1, 'MI9') AS "1",
to_char(-1, 'MI9') AS "-1",
to_char(0, 'MI9') AS "0";
Ergebnis:
1 | -1 | 0 ----+----+---- 1 | -1 | 0
Nur die negative Zahl bekommt das Minuszeichen. Die positive Zahl und die Null erhalten kein Vorzeichen.
Beispiel mit PL
Hier ist die Ausgabe auf meinem System, wenn ich PL
verwende .
SELECT
to_char(1, 'PL9') AS "1",
to_char(-1, 'PL9') AS "-1",
to_char(0, 'PL9') AS "0";
Ergebnis:
1 | -1 | 0 -----+-----+----- + 1 | -1 | + 0
Beispiel mit PR
Hier ist die Ausgabe auf meinem System, wenn ich PR
verwende .
SELECT
to_char(1, '9PR') AS "1",
to_char(-1, '9PR') AS "-1",
to_char(0, '9PR') AS "0";
Ergebnis:
1 | -1 | 0 -----+-----+----- 1 | <1> | 0
Beachten Sie, dass PR
muss nach kommen 9
.
Folgendes passiert, wenn ich versuche, es vor 9
zu setzen :
SELECT
to_char(1, 'PR9') AS "1",
to_char(-1, 'PR9') AS "-1",
to_char(0, 'PR9') AS "0";
Ergebnis:
FEHLER:"9" muss vor "PR" stehen
SG gegen S
Sie haben vielleicht bemerkt, dass die Beispiele mit SG
und S
scheinen dasselbe Ergebnis auszugeben und fragen sich daher, was der Unterschied zwischen ihnen ist.
Der Unterschied besteht darin, dass S
ist an der Nummer verankert, während SG
, MI
, PL
nicht.
S
verwendet auch das Gebietsschema, daher hängt das tatsächlich verwendete Zeichen von Ihrem Gebietsschema ab.
Hier ist ein Beispiel, das den Unterschied bei der Verankerung demonstriert.
SELECT
to_char(1, 'S999') AS "S",
to_char(1, 'SG999') AS "SG";
Ergebnis:
Und Folgendes passiert, wenn die Zahl größer wird.
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";
Ergebnis: