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

Anteponi un segno più/meno a un numero in PostgreSQL

In PostgreSQL, puoi usare to_char() per emettere un numero in un determinato formato, anche con un segno più o meno per indicare se si tratta di un numero positivo o negativo.

Per fare ciò, usa uno dei S , MI , PL o SG nella tua stringa di formato.

Un'altra opzione è usare PR per racchiudere eventuali valori negativi tra parentesi angolari.

Modelli di modello per i numeri firmati

È possibile utilizzare i seguenti modelli di modello per applicare il segno appropriato al numero.

Modello Descrizione
MI Segno meno nella posizione specificata (se numero <0).
PL Segno più nella posizione specificata (se numero> 0).
SG Segno più o meno nella posizione specificata, a seconda che il numero sia positivo o negativo.
S Segno ancorato al numero (usa la localizzazione).
PR Questo racchiude tutti i valori negativi tra parentesi angolari.

Nota che MI , PL o SG sono estensioni Postgres (non sono SQL standard).

Esempio usando S

Ecco un esempio per dimostrare la S modello.

SELECT to_char(1, 'S9'); 

Risultato:

+1

In questo caso, il numero è positivo e quindi, utilizzando le mie impostazioni locali, il segno più è anteposto ad esso.

Eccolo di nuovo, ma con tre valori; positivo, negativo e zero.

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

Risultato:

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

Esempio di utilizzo di SG

Ecco lo stesso esempio con il SG modello.

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

Risultato:

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

Esempio di utilizzo di MI

Ecco cosa succede se cambio SG con MI .

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

Risultato:

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

Solo il numero negativo ottiene il segno meno. Il numero positivo e lo zero non hanno alcun segno.

Esempio di utilizzo di PL

Ecco l'output sul mio sistema quando uso PL .

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

Risultato:

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

Esempio di utilizzo di PR

Ecco l'output sul mio sistema quando utilizzo PR .

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

Risultato:

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

Nota che PR deve venire dopo 9 .

Ecco cosa succede se provo a metterlo prima di 9 :

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

Risultato:

ERRORE:"9" deve precedere "PR"

SG vs S

Potresti aver notato che gli esempi utilizzano SG e S sembrano produrre lo stesso risultato e quindi mi chiedo quale sia la differenza tra loro.

La differenza è che S è ancorato al numero mentre SG , MI , PL non lo sono.

S utilizza anche la lingua, quindi il segno effettivo utilizzato dipenderà dalla tua lingua.

Ecco un esempio che dimostra la differenza di ancoraggio.

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

Risultato:

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

Ed ecco cosa succede man mano che il numero cresce.

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

Risultato:

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