sql >> Database >  >> RDS >> PostgreSQL

Voeg een plus-/minteken toe aan een getal in PostgreSQL

In PostgreSQL kunt u de to_char() . gebruiken om een ​​getal in een bepaald formaat uit te voeren, inclusief met een plus- of minteken om aan te geven of het een positief of negatief getal is.

Gebruik hiervoor een van de S , MI , PL , of SG in je format string.

Een andere optie is om PR . te gebruiken om eventuele negatieve waarden tussen punthaken te plaatsen.

Sjabloonpatronen voor ondertekende nummers

De volgende sjabloonpatronen kunnen worden gebruikt om het juiste teken op het nummer toe te passen.

Patroon Beschrijving
MI Minusteken op gespecificeerde positie (indien cijfer <0).
PL Plusteken op gespecificeerde positie (indien nummer> 0).
SG Plus- of minteken op gespecificeerde positie, afhankelijk van of het getal positief of negatief is.
S Teken verankerd aan nummer (gebruikt landinstelling).
PR Hiermee worden eventuele negatieve waarden tussen punthaken geplaatst.

Merk op dat MI , PL , of SG zijn Postgres-extensies (het zijn geen standaard SQL).

Voorbeeld met S

Hier is een voorbeeld om de S . te demonstreren patroon.

SELECT to_char(1, 'S9');

Resultaat:

+1

In dit geval is het getal positief en als ik mijn landinstelling gebruik, wordt het plusteken eraan toegevoegd.

Hier is het weer, maar met drie waarden; een positief, een negatief en nul.

SELECT 
  to_char(1, 'S9') AS "1",
  to_char(-1, 'S9') AS "-1",
  to_char(0, 'S9') AS "0";

Resultaat:

 1  | -1 | 0  
----+----+----
 +1 | -1 | +0

Voorbeeld met SG

Hier is hetzelfde voorbeeld met de SG patroon.

SELECT 
  to_char(1, 'SG9') AS "1",
  to_char(-1, 'SG9') AS "-1",
  to_char(0, 'SG9') AS "0";

Resultaat:

 1  | -1 | 0  
----+----+----
 +1 | -1 | +0

Voorbeeld met MI

Dit is wat er gebeurt als ik SG verwissel met MI .

SELECT 
  to_char(1, 'MI9') AS "1",
  to_char(-1, 'MI9') AS "-1",
  to_char(0, 'MI9') AS "0";

Resultaat:

 1  | -1 | 0  
----+----+----
  1 | -1 |  0

Alleen het negatieve getal krijgt het minteken. Het positieve getal en nul krijgen geen teken.

Voorbeeld met PL

Dit is de uitvoer op mijn systeem als ik PL gebruik .

SELECT 
  to_char(1, 'PL9') AS "1",
  to_char(-1, 'PL9') AS "-1",
  to_char(0, 'PL9') AS "0";

Resultaat:

  1  | -1  |  0  
-----+-----+-----
 + 1 |  -1 | + 0

Voorbeeld met PR

Dit is de uitvoer op mijn systeem als ik PR gebruik .

SELECT 
  to_char(1, '9PR') AS "1",
  to_char(-1, '9PR') AS "-1",
  to_char(0, '9PR') AS "0";

Resultaat:

  1  | -1  |  0  
-----+-----+-----
  1  | <1> |  0 

Merk op dat PR moet na komen 9 .

Dit gebeurt er als ik het voor 9 probeer te plaatsen :

SELECT 
  to_char(1, 'PR9') AS "1",
  to_char(-1, 'PR9') AS "-1",
  to_char(0, 'PR9') AS "0";

Resultaat:

ERROR:  "9" must be ahead of "PR"

SG versus S

Het is je misschien opgevallen dat de voorbeelden met SG en S lijken hetzelfde resultaat te geven en vragen zich daarom af wat het verschil tussen beide is.

Het verschil is dat S is verankerd aan het nummer terwijl SG , MI , PL zijn niet.

S gebruikt ook de landinstelling, dus het daadwerkelijke teken dat wordt gebruikt, hangt af van uw landinstelling.

Hier is een voorbeeld dat het verschil in verankering laat zien.

SELECT 
  to_char(1, 'S999') AS "S",
  to_char(1, 'SG999') AS "SG";

Resultaat:

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

En dit is wat er gebeurt als het aantal groter wordt.

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";

Resultaat:

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

  1. bestellen op newid() - hoe werkt het?

  2. Top 30 SQL Query-interviewvragen die u moet oefenen in 2022

  3. Het SQL Server-transactielogboek, deel 2:logboekarchitectuur

  4. Bereken het tijdsverschil tussen twee rijen