In PostgreSQL, puoi usare to_number() funzione per convertire una stringa in un valore numerico.
Più specificamente, converte la rappresentazione di stringa di un numero in un valore numerico.
Ad esempio, se hai $1,234.50 come stringa, puoi usare to_number() per convertirlo in un numero effettivo che utilizza il numero tipo di dati.
Sintassi
La sintassi è questa:
to_number(text, text) Dove il primo argomento è una rappresentazione in formato stringa del numero e il secondo argomento definisce il modello utilizzato dal primo argomento.
Esempio
Ecco un esempio di base da dimostrare.
SELECT to_number('80', '99'); Risultato:
80
In questo caso, ho usato 99 come modello. Ogni 9 è indicato come un "modello modello". Il 9 il modello di modello rappresenta una posizione di una cifra. Ne ho usati due, perché volevo che fossero incluse entrambe le cifre.
Ecco cosa succede se rimuovo uno dei 9 s.
SELECT to_number('80', '9'); Risultato:
8
Quindi è importante includere il numero corretto di modelli di modello nel modello.
Separatore di gruppo e punto decimale
Quando lavori con numeri più grandi e/o numeri con secondi frazionari, dovrai includere modelli di modelli che specifichino il separatore di gruppo e/o il punto decimale.
Ci sono due modi per farlo.
La prima opzione è digitare letteralmente la virgola e il punto decimale.
SELECT to_number('7,000.25', '9,999.99'); Risultato:
7000.25
La seconda opzione consiste nell'usare le versioni compatibili con le impostazioni locali. Questi sono G per il separatore di gruppo (separatore delle migliaia) e D per il punto decimale.
Quindi l'esempio precedente potrebbe essere riscritto come segue:
SELECT to_number('7,000.25', '9G999D99'); Risultato:
7000.25
Simbolo di valuta
La L il modello di modello rappresenta un simbolo di valuta compatibile con le impostazioni locali.
SELECT to_number('$7,000.25', 'L9G999D99'); Risultato:
7000.25
Tipo di reso
Il valore di ritorno di to_number() la funzione è numerica.
Puoi controllare il tipo restituito con pg_typeof() funzione.
SELECT pg_typeof(to_number('$7,000.25', 'L9G999D99')); Risultato:
numeric
Risultati imprevisti?
È importante ottenere il modello giusto. Altrimenti potresti avere risultati inaspettati.
Ecco un esempio di cosa succede se mi dimentico semplicemente di includere la L modello modello dall'esempio precedente.
SELECT to_number('$7,000.25', '9G999D99'); Risultato:
7000
Quindi perché ho dimenticato di includere la L modello di modello (per la valuta), questo ha messo l'intero modello non sincronizzato con il numero, che ha portato alla G essere ignorato, così come il D .
Giusto per essere chiari, eccolo di nuovo rispetto al modello corretto.
SELECT
to_number('$7,000.25', 'L9G999D99') AS "Right",
to_number('$7,000.25', '9G999D99') AS "Wrong"; Risultato:
Right | Wrong ---------+------- 7000.25 | 7000
to_number() vs cast()
Il to_number() la funzione viene fornita principalmente per gestire formati di input che non possono essere convertiti mediante semplice casting. Non è quindi generalmente necessario per le rappresentazioni numeriche standard.
Quindi il primo esempio in questa pagina potrebbe essere stato fatto usando cast() .
SELECT cast('80' AS NUMERIC); Risultato:
80
Ma iniziamo ad avere problemi quando le cose diventano un po' più complesse.
SELECT cast('$7,000.25' AS NUMERIC); Risultato:
ERROR: invalid input syntax for type numeric: "$7,000.25"
LINE 1: SELECT cast('$7,000.25' AS NUMERIC);
Quindi to_number() è stato progettato principalmente per situazioni come questa.
Elenco completo di modelli e modificatori di modelli
Postgres include molti più modelli e modificatori di modelli.
Questi possono essere utilizzati anche durante la formattazione di valori numerici (ad esempio quando si utilizza to_char() funzione per restituire una rappresentazione di stringa formattata del numero).
Vedi Modelli e modificatori di modelli per la formattazione numerica in PostgreSQL per un elenco completo.