La maggior parte dei principali RDBMS fornisce modi per formattare i numeri utilizzando SQL. Alcuni forniscono solo funzionalità di formattazione di base, mentre altri sono più avanzati.
Di seguito sono riportati esempi di formattazione di un numero in alcuni dei più diffusi RDBMS.
MySQL
In MySQL, possiamo usare FORMAT()
funzione per formattare un numero in un formato specifico. Questa funzione accetta tre parametri; il numero, il numero di cifre decimali e una lingua facoltativa:
SELECT FORMAT(123456.789, 2);
Risultato:
123,456.79
Come accennato, puoi anche passare un terzo argomento per specificare la locale da utilizzare per il modello di formattazione. Vedi Come formattare i numeri in MySQL per un esempio.
Per formattare i numeri come valuta, consulta Come formattare i numeri come valuta in MySQL.
Oracolo
Oracle Database ci offre una serie di opzioni quando si tratta di formattare i numeri.
In particolare, il TO_CHAR(number)
la funzione ci consente di formattare un numero in base al nostro modello di formato personalizzato.
Esempio:
SELECT
TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;
Risultato:
$12,345.00
Il primo argomento è il numero da formattare e il secondo argomento è il modello di formato. Il modello di formato è costituito da uno o più elementi di formato, ognuno dei quali rappresenta un elemento diverso nell'output formattato.
Nell'esempio sopra, utilizziamo il 9
carattere per rappresentare ogni cifra e il 0
carattere per emettere la cifra o zero (a seconda che esista o meno una cifra in quella posizione). Usiamo anche G
per un separatore di gruppo compatibile con le impostazioni locali e D
per un separatore decimale compatibile con le impostazioni locali. Il fm
sopprime qualsiasi riempimento iniziale o finale che potrebbe essere applicato al risultato.
Ecco un elenco completo di elementi di formato che puoi utilizzare per il tuo modello di formato durante la formattazione dei numeri.
Esistono altri modi per formattare i numeri in Oracle. Ad esempio, il LPAD()
La funzione può essere utilizzata per convertire i numeri in una stringa e formattarli esattamente come preferisci al volo. Funziona come CAST()
può anche avere un effetto sulla formattazione di un numero, a seconda del tipo di dati con cui viene trasmesso.
Vedi Come formattare i numeri in Oracle per maggiori dettagli ed esempi.
PostgreSQL
Come Oracle, anche PostgreSQL ha un TO_CHAR()
funzione, e funziona più o meno allo stesso modo:
SELECT TO_CHAR(923, 'fm000G000th');
Risultato:
000,923rd
Qui, ho usato il 0
format per produrre zeri iniziali, anche quando il numero originale non aveva cifre in quel punto. In questo caso, ho usato il th
format per convertire il numero nel suo ordinale. Ho anche usato G
per un separatore di gruppo con riconoscimento delle impostazioni locali.
Ecco un elenco di modelli di modelli in cui può essere costituita la stringa di formato durante la formattazione dei numeri, nonché i modificatori di formato.
Un altro modo per formattare un numero in PostgreSQL è convertirlo in money
tipo di dati. Numeri memorizzati come money
tipo vengono emessi in un formato compatibile con le impostazioni locali, con il simbolo di valuta appropriato, il separatore di gruppo, il separatore decimale e così via:
SELECT CAST(10000 as money);
Risultato:
$10,000.00
Vedi Come formattare i numeri in PostgreSQL per ulteriori esempi di formattazione dei numeri in PostgreSQL.
SQL Server
SQL Server ha il FORMAT()
funzione, che funziona in modo molto simile a TO_CHAR()
di Oracle e PostgreSQL funzione, in quanto consente di formattare i numeri in base a una stringa di formato:
SELECT
FORMAT(123456.789, 'N') AS "Number",
FORMAT(123456.789, 'P') AS "Percent",
FORMAT(123456.789, 'C') AS "Currency";
Risultato:
+------------+----------------+-------------+ | Number | Percent | Currency | |------------+----------------+-------------| | 123,456.79 | 12,345,678.90% | $123,456.79 | +------------+----------------+-------------+
Questo esempio mostra tre identificatori di formato standard, ognuno dei quali restituisce il numero in un formato specifico.
Possiamo anche utilizzare i nostri identificatori di formato personalizzati, che ci consentono di creare il nostro formato, nel caso in cui il formato standard non sia quello che vogliamo.
Puoi anche fare cose come formattare i numeri nel loro equivalente esadecimale o usare la notazione esponenziale, ecc.
E puoi passare un terzo argomento facoltativo per specificare la locale per la quale formattare il numero (formatta il numero usando le convenzioni di quella locale).
Vedi Come formattare i numeri in SQL Server per altri esempi.
MariaDB
Come MySQL, MariaDB ha un FORMAT()
funzione, che fornisce la formattazione di base dei numeri.
Ecco un esempio di utilizzo di questa funzione per formattare un numero utilizzando diverse impostazioni locali:
SELECT
FORMAT(123456.789, 2, 'ta_IN') AS "Tamil, India",
FORMAT(123456.789, 2, 'de_DE') AS "German, Germany",
FORMAT(123456.789, 2, 'zh_HK') AS "Chinese, Hong Kong";
Risultato:
+--------------+-----------------+--------------------+ | Tamil, India | German, Germany | Chinese, Hong Kong | +--------------+-----------------+--------------------+ | 1,23,456.79 | 123.456,79 | 123,456.79 | +--------------+-----------------+--------------------+
Vedi Come formattare i numeri in MariaDB per altri esempi.
SQLite
SQLite è più limitato degli altri DBMS quando si tratta di formattare i numeri. Tuttavia, ci sono modi per ottenere una formattazione di base dei numeri:
SELECT PRINTF("%,d", 123456789);
Risultato:
123,456,789
Il PRINTF()
la funzione può generare separatori di gruppo per numeri interi, ma non per numeri in virgola mobile/reale. Per formattare i numeri in virgola mobile/reale, dovresti fare un po' più di lavoro. Vedi Formattare i numeri con una virgola in SQLite per un esempio di cosa intendo.
Aggiorna :SQLite 3.38.0 (rilasciato il 22 febbraio 2022) rinominato PRINTF()
funzione su FORMAT()
. Il PRINTF()
originale name viene mantenuto come alias per la compatibilità con le versioni precedenti.
Quindi l'esempio sopra può essere modificato in questo:
SELECT FORMAT("%,d", 123456789);
Risultato:
123,456,789