In Oracle Database, puoi formattare i numeri in molti modi.
Ad esempio, puoi formattare un numero come valuta, con virgole e punti decimali al posto giusto. Puoi specificare zeri iniziali, aggiungere una parte frazionaria o rimuoverla, se è necessario.
Questo articolo contiene esempi di quanto segue:
- Formatta i numeri come valuta
- Aggiungi un separatore virgola/migliaia
- Includi cifre decimali
- Rimuovi tutte le cifre decimali
- Aggiungi zeri iniziali a un numero
Spiego anche come la formattazione è influenzata dai parametri NLS della tua sessione.
I parametri di inizializzazione NLS determinano quali caratteri vengono utilizzati per il separatore di gruppo, il carattere decimale e il simbolo di valuta nella sessione corrente. Puoi sfruttare questi parametri per generare una formattazione compatibile con le impostazioni locali.
Puoi utilizzare funzioni come TO_CHAR(number)
e persino LPAD()
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.
Un rapido esempio
Ecco un rapido esempio di formattazione di un numero utilizzando TO_CHAR()
funzione:
SELECT
TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;
Risultato:
$12,345.00
Il fmL99G999D00
part è un modello di formato che determina come formattare l'output. È possibile modificare il modello di formato in base alle proprie esigenze.
Ogni carattere nel modello di formato è un elemento di formato e ha un significato speciale. Puoi aggiungere o rimuovere elementi di formato come richiesto.
Ecco un elenco completo degli elementi di formato che puoi utilizzare per il tuo modello di formato durante la formattazione dei numeri.
Anche se è vero che puoi fornire una stringa letterale per vari elementi di formato (ad esempio, un segno di dollaro ($
) per dollari), questo presuppone che la valuta sia denominata in quel valore hardcoded. Esistono molte altre valute possibili in tutto il mondo e gli elementi del formato sono in grado di restituire dinamicamente il simbolo della valuta locale per la sessione dell'utente.
È lo stesso per il separatore di gruppo e il carattere decimale. Locali diversi utilizzano convenzioni diverse. L'utilizzo di questi elementi di formato con riconoscimento delle impostazioni locali rende il codice più portabile.
Inoltre, il TO_CHAR()
La funzione consente di passare i propri parametri NLS all'interno della funzione. Ciò influisce solo su quella chiamata di funzione, quindi puoi cambiare cose come i simboli di valuta al volo senza bisogno di codificarlo nel tuo modello di formato o aggiornare i parametri NLS per la tua sessione.
Gli esempi seguenti mostrano come funziona ogni elemento di formato in modo più dettagliato.
Formatta i numeri come valuta
Ecco un esempio di formattazione di un numero come valuta:
SELECT
TO_CHAR(12, 'fmL99')
FROM DUAL;
Risultato:
$12
In questo caso, ho usato la L
elemento di formato per specificare il simbolo della valuta locale. Il simbolo della valuta locale è determinato da NLS_CURRENCY
parametro.
In alternativa puoi usare il C
o U
elementi di formato, che restituiscono rispettivamente il simbolo della valuta ISO e il simbolo della doppia valuta.
Vedi Come formattare i numeri come valuta in Oracle per ulteriori informazioni ed esempi.
Aggiungi un separatore di virgole/migliaia
Sebbene tu possa sempre utilizzare una virgola hardcoded per il separatore di migliaia/gruppo, questo non tiene conto dei paesi che utilizzano un punto per il separatore di gruppo. È ovviamente vero il contrario. Inoltre, alcuni paesi separano migliaia di gruppi con uno spazio sottile.
Puoi usare il G
format per specificare un separatore di gruppo. Questo restituisce dinamicamente il separatore di gruppo applicabile come specificato in NLS_NUMERIC_CHARACTERS
parametro. Questo parametro determina sia il separatore di gruppo che il carattere decimale.
Esempio:
SELECT
TO_CHAR(12345, 'fm99G999')
FROM DUAL;
Risultato:
12,345
Ecco un altro esempio con un numero maggiore:
SELECT
TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;
Risultato:
123,456,789
Vedi Come formattare un numero con una virgola in Oracle per una discussione più dettagliata.
Includi posizioni decimali
Sebbene sia vero che puoi codificare il tuo carattere radix (ad esempio un punto) nel tuo modello di formato, questo non soddisferà altre localizzazioni che utilizzano un carattere diverso.
Puoi usare il D
format per restituire il carattere decimale/radix specificato in NLS_NUMERIC_CHARACTERS
parametro per la sessione corrente:
SELECT
TO_CHAR(7, 'fm9D00')
FROM DUAL;
Risultato:
7.00
In questo caso ho usato due 0
formattare gli elementi dopo il carattere radix. Questo elemento di formato restituisce zeri finali, ove applicabile.
Usando un 9
sopprimerebbe tutti gli zeri finali in questo caso:
SELECT
TO_CHAR(7, 'fm9D99')
FROM DUAL;
Risultato:
7.
Tuttavia, se rimuoviamo il fm
modificatore di formato, otteniamo un risultato diverso:
SELECT
TO_CHAR(7, '9D99')
FROM DUAL;
Risultato:
7.00
Il fm
il modificatore di formato sopprime qualsiasi riempimento applicato al risultato. Rimuovendolo, il nostro risultato è imbottito. Contiene uno spazio iniziale, perché è qui che sarebbe andato un segno negativo se il numero fosse stato negativo. E contiene anche zeri finali, perché abbiamo specificato due 9
formattare gli elementi.
Consulta 3 modi per formattare un numero in 2 posizioni decimali in Oracle per ulteriori idee su come formattare i numeri con posizioni decimali.
Rimuovi tutte le posizioni decimali
Esistono diversi modi per formattare un numero in modo che non abbia posizioni decimali. Un modo ovvio è semplicemente rimuovere la parte decimale dalla nostra stringa di formato:
SELECT
TO_CHAR(7, 'fm9')
FROM DUAL;
Risultato:
7
Ma possiamo anche usare altre funzioni, come ROUND()
, TRUNC()
e CAST()
per ottenere lo stesso effetto o un effetto simile.
Vedi 4 modi per formattare un numero senza decimali in Oracle per esempi.
Aggiungi zeri iniziali
Abbiamo un paio di opzioni quando si tratta di aggiungere zeri iniziali al nostro numero.
Ancora una volta, attenendoci a TO_CHAR()
funzione, possiamo usare il 0
format per restituire zeri iniziali e finali.
SELECT
TO_CHAR(7, 'fm000')
FROM DUAL;
Risultato:
007
Se avessimo usato il 9
format, non avremmo zeri iniziali:
SELECT
TO_CHAR(7, 'fm999')
FROM DUAL;
Risultato:
7
Tuttavia, se rimuoviamo il fm
modificatore di formato, avremmo ottenuto uno spazio in cui qualsiasi zero iniziale sarebbe stato:
SELECT
TO_CHAR(7, '999')
FROM DUAL;
Risultato:
7
Un altro modo per formattare un numero con zeri iniziali è con LPAD()
funzione. Questa funzione applica il riempimento sinistro a una stringa oa un numero. Puoi specificare quale/i carattere/i utilizzare per il riempimento, quindi se usi uno zero, verrà riempito con zeri.
Vedi 2 modi per formattare un numero con zeri iniziali in Oracle per un esempio.
Come controllare i parametri NLS
I parametri NLS (National Language Support) determinano il comportamento specifico della locale sia sul client che sul server. Ciò include parametri che determinano quali caratteri utilizzare per separatore di gruppo, carattere decimale, simboli di valuta, ecc.
Controlliamo il valore attuale dei miei parametri NLS:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS;
Risultato:
PARAMETER VALUE __________________________ _________________________________ NLS_LANGUAGE ENGLISH NLS_TERRITORY AUSTRALIA NLS_CURRENCY $ NLS_ISO_CURRENCY AUSTRALIA NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD/MON/RR NLS_DATE_LANGUAGE ENGLISH NLS_CHARACTERSET AL32UTF8 NLS_SORT BINARY NLS_TIME_FORMAT HH12:MI:SSXFF AM NLS_TIMESTAMP_FORMAT DD/MON/RR HH12:MI:SSXFF AM NLS_TIME_TZ_FORMAT HH12:MI:SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD/MON/RR HH12:MI:SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE
I seguenti parametri determinano gli elementi di formattazione per numeri e valute:
NLS_CURRENCY
NLS_ISO_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_DUAL_CURRENCY
Il valore predefinito di questi parametri è determinato da NLS_TERRITORY
parametro. Quando impostiamo il valore di NLS_TERRITORY
parametro, questo imposta implicitamente il valore per vari altri parametri (inclusi i quattro citati).
Nel mio caso, il mio territorio è l'Australia, quindi questi quattro parametri riflettono il modo in cui i numeri sono tipicamente formattati in Australia. Se dovessi cambiarlo per dire Germania, quei quattro parametri verrebbero aggiornati per riflettere la formattazione per la Germania.
Tuttavia, puoi impostare in modo esplicito ogni parametro individualmente. Ciò ti consente di sovrascrivere il valore che è stato impostato implicitamente da NLS_TERRITORY
parametro.