PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Stellen Sie in PostgreSQL einer Zahl ein Plus-/Minuszeichen voran

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:

S | SG ------+------ +1 | + 1

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:

S | SG | S | SG | S | SG ------+------+------+------+------+------ +1 | + 1 | +10 | + 10 | +100 | +100