CodeGym /Corsi /SQL SELF /Tipi di dati numerici: INTEGER, NUME...

Tipi di dati numerici: INTEGER, NUMERIC, FLOAT

SQL SELF
Livello 15 , Lezione 1
Disponibile

Tipi di dati numerici: INTEGER, NUMERIC, FLOAT

Oggi parliamo dei tipi di dati numerici in PostgreSQL. Se ti sei mai chiesto come salvare il numero "42", fare calcoli finanziari o magari gestire i millisecondi, sei nel posto giusto. Vediamo insieme quale tipo usare per ogni situazione, così tu e i tuoi dati starete sempre comodi.

I tipi di dati numerici in PostgreSQL si dividono in tre gruppi principali:

  1. Numeri interi (INTEGER): per salvare numeri senza parte decimale. Sono i classici numeri tipo 1, 42, -7.
  2. Numeri esatti (NUMERIC): per salvare numeri con un numero fisso di cifre decimali. Utile per i calcoli finanziari, dove la precisione conta più della vita stessa.
  3. Numeri a virgola mobile (REAL): per numeri che possono essere enormi o minuscoli. Sono meno precisi di NUMERIC, ma perfetti per i calcoli scientifici.

Tipo INTEGER

INTEGER è il tipo di dato per i numeri interi. Va bene quando devi salvare numeri senza parte decimale. PostgreSQL offre ben tre varianti di INTEGER per coprire diversi range:

  • SMALLINT: tipo intero piccolo. Range: da -32.768 a 32.767.
  • INTEGER (o INT): tipo intero standard. Range: da -2.147.483.648 a 2.147.483.647.
  • BIGINT: per numeri grandi. Range: da -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807.

Immagina di avere una tabella students dove salvi info sugli studenti: il loro nome, età e il numero di crediti (punti accademici):

id name age credits
1 Otto Nate 21 30
2 Maria Chi 22 45
3 Peter Val 20 60
4 Anna Song 23 50
5 Sophie Zhang 21 35

Ora facciamo una semplice query SQL per ottenere la lista degli studenti con la loro età e i crediti:

SELECT name, age, credits
FROM students;

Risultato:

name age credits
Otto Nate 21 30
Maria Chi 22 45
Peter Val 20 60
Anna Song 23 50
Sophie Zhang 21 35

Quando usare INTEGER?

  • Per salvare identificatori (id, numero ordine).
  • Per salvare quantità di qualcosa (tipo il numero di prodotti in magazzino, numero di studenti).

Tipo NUMERIC

NUMERIC è il tipo di dato per numeri esatti con la virgola fissa. Se devi salvare qualcosa tipo 123.456 e un errore su una cifra decimale ti costa la reputazione (o i soldi), usa NUMERIC.

Formato dichiarazione: NUMERIC(precision, scale), dove:

  • precision — numero totale di cifre (sia prima che dopo la virgola).
  • scale — numero di cifre dopo la virgola.

Per esempio, NUMERIC(6, 2) ti permette di salvare numeri con massimo 6 cifre, di cui 2 dopo la virgola.

Creiamo una tabella per tracciare le transazioni finanziarie:

id description amount
1 Pagamento per lo studio 2345.67
2 Borsa di studio mensile 500.00
3 Tassa laboratorio 145.99
4 Multa biblioteca 12.75
5 Registrazione conferenza 320.50

Ora mostriamo la lista delle transazioni:

SELECT description, amount
FROM transactions;

Risultato:

description amount
Pagamento per lo studio 2345.67
Borsa di studio mensile 500.00
Tassa laboratorio 145.99
Multa biblioteca 12.75
Registrazione conferenza 320.50

Quando usare NUMERIC?

  • Calcoli finanziari (prezzo prodotti, stipendi).
  • Salvare misurazioni precise (peso, lunghezza).

Tabella measurements

id mass - REAL height - REAL
1 70.5 1.83
2 64.2 1.75
3 82.3 1.92
4 55.0 1.60

Ora mostriamo i valori:

SELECT mass, height
FROM measurements;

Risultato:

mass height
70.5 1.83
64.2 1.75
82.3 1.92
55.0 1.60

Quando usare REAL?

  • Calcoli scientifici (massa degli atomi, distanza dalla Luna).
  • Simulazioni dati dove qualche errore è ok.

Confronto tipi numerici: quando usare cosa?

Tipo di dato Range Precisione Esempi d'uso
SMALLINT -32.768 a 32.767 Numeri interi Numeri piccoli (età, rating).
INTEGER -2.147.483.648 a 2.147.483.647 Numeri interi Identificatori, quantità.
BIGINT -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Numeri interi Numeri davvero grandi.
NUMERIC Dipende da precision e scale Numeri decimali esatti Finanza, misurazioni.
REAL Circa 6 cifre decimali Virgola mobile Dati approssimativi o scientifici.
DOUBLE PRECISION Circa 15 cifre decimali Virgola mobile ad alta precisione Scienza, ricerca.

Alias

In PostgreSQL molti tipi numerici hanno alias (sinonimi): sono nomi alternativi per i tipi che si comportano allo stesso modo, ma migliorano la leggibilità o la compatibilità con altri DBMS.

Ecco una guida veloce e chiara agli alias dei tipi numerici in PostgreSQL:

Alias per tipi interi

Alias Tipo reale Dimensione Range
INT INTEGER 4 byte −2.147.483.648 a 2.147.483.647
INT4 INTEGER 4 byte (alias vecchio)
SMALLINT SMALLINT 2 byte −32.768 a 32.767
INT2 SMALLINT 2 byte
BIGINT BIGINT 8 byte −9 quintilioni a +9 quintilioni
INT8 BIGINT 8 byte

Alias per numeri esatti

Alias Tipo reale Uso
DEC NUMERIC Sinonimo secondo lo standard SQL
DECIMAL NUMERIC Stessa cosa

Alias per numeri a virgola mobile

Alias Tipo reale Precisione
FLOAT DOUBLE PRECISION ~15 cifre (default)
FLOAT(24) REAL ~6 cifre
FLOAT(53) DOUBLE PRECISION ~15 cifre
FLOAT8 DOUBLE PRECISION Alias vecchio
FLOAT4 REAL Alias vecchio

Errori tipici

Lavorando con i tipi numerici, puoi incappare in qualche trappola:

Scegliere un tipo di dato troppo piccolo. Se per l'età delle persone usi SMALLINT, sbagli. Il robot di "Matrica", che ha milioni di anni, ci rimane male.

Perdita di dati per arrotondamento. Se usi REAL per i calcoli finanziari, rischi di perdere i centesimi. E poi anche la fiducia dei clienti.

Confronto tra tipi diversi. Se confronti INTEGER e REAL, puoi avere risultati strani per via di come sono rappresentati i numeri a virgola mobile.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION