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:
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:
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:
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:
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:
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