sql >> Databasteknik >  >> RDS >> PostgreSQL

Lägg ett plus/minustecken till ett nummer i PostgreSQL

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

  1. Hur REPLICATE()-funktionen fungerar i SQL Server (T-SQL)

  2. Synkronisera databasstruktur mellan applikationer

  3. Returnera resultat av en sql-fråga som JSON i oracle 12c

  4. Databasdesign:Beräknar kontosaldot