sql >> Database teknologi >  >> RDS >> PostgreSQL

Sæt et plus/minustegn foran et tal i PostgreSQL

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

  1. Hvordan planlægger man en MySQL-forespørgsel?

  2. Gæstebrugeradgangskode i 11i/R12

  3. Generer_serier i Postgres fra start- og slutdato i en tabel

  4. Transactionscope-undtagelse denne platform understøtter ikke distribuerede transaktioner, mens forbindelsesobjekt åbnes