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

Come formattare i numeri come valuta in PostgreSQL

Per formattare un numero come valuta in Postgres, puoi convertirlo nel tipo di dati denaro o utilizzare to_char() per convertirlo in testo che includa il simbolo di valuta appropriato.

Ciò ovviamente presuppone che il numero non sia già memorizzato utilizzando il tipo di denaro.

Di seguito sono riportati esempi di ciascuna di queste opzioni.

Convertire in denaro

Ecco un esempio di conversione di un numero nel tipo di dati Money.

SELECT cast(12 as money); 

Risultato:

$ 12,00

Ecco un altro esempio, questa volta utilizzando un importo maggiore.

SELECT cast(123456.78 as money); 

Risultato:

$ 123.456,78

Converti da un numero in virgola mobile

Si sconsiglia di utilizzare numeri in virgola mobile per gestire denaro a causa della possibilità di errori di arrotondamento. Tuttavia, se devi farlo, puoi prima convertire in numerico, quindi in denaro.

SELECT '123456.78'::float8::numeric::money; 

Risultato:

$ 123.456,78

Se provi a convertire direttamente da virgola mobile in denaro, riceverai un errore.

SELECT '123456.78'::float8::money; 

Risultato:

ERRORE:impossibile eseguire il cast type double precision in money

Converti in testo

Ecco un esempio di utilizzo di to_char() per convertire il valore in testo con il simbolo della valuta incluso.

SELECT to_char(12, 'L99D99'); 

Risultato:

$ 12,00

Qui, sia il simbolo della valuta che la cifra decimale utilizzano le impostazioni locali correnti.

La stringa di formato per to_char() dovrà essere adeguato all'importo previsto.

Ad esempio, se l'importo può arrivare a centinaia di migliaia, la seguente stringa di formato sarebbe più appropriata.

SELECT to_char(123456.78, 'L999G999D99'); 

Risultato:

$ 123.456,78

In questo caso ho aggiunto il G modello di modello per un separatore di gruppo in grado di riconoscere le impostazioni locali (denominato anche "separatore delle migliaia"). Avrei potuto usare una virgola (, ), ma non sarebbe stato in grado di riconoscere le impostazioni locali.

E ho aggiunto di nuovo la D modello di modello per un punto decimale compatibile con le impostazioni locali.

Ecco cosa succede se rimuovo questi due modelli di modello dalla mia stringa di formato.

SELECT to_char(123456.78, 'L999999'); 

Risultato:

$ 123457

Zeri insignificanti

Puoi usare 0 invece di 9 mantenere zeri insignificanti.

Il 9 il modello modello elimina tutti gli zeri insignificanti mentre 0 il modello non lo fa.

Ecco un esempio che illustra la differenza tra i due.

SELECT 
  to_char(12, 'L9999') AS "L9999",
  to_char(12, 'L0000') AS "L0000"; 

Risultato:

L9999 | L0000 --------+-------- $ 12 | $ 0012

Modalità di riempimento

C'è un pratico modificatore del modello di modello chiamato FM . Questo è per la "modalità riempimento" e sopprime gli zeri finali e gli spazi vuoti iniziali.

Possiamo quindi utilizzare quel modificatore per modificare l'esempio precedente.

SELECT 
  to_char(12, 'LFM9999') AS "LFM9999",
  to_char(12, 'LFM0000') AS "LFM0000"; 

Risultato:

LFM9999 | LFM0000 ---------+--------- $12 | $ 0012

Si noti che ha soppresso gli spazi vuoti iniziali tra il simbolo del dollaro e il numero.