back to top

SQL: tipi di dato numerici, stringa e temporali

Nella precedente lezione abbiamo spiegato cos’è un database e abbiamo detto che, per immagazzinare i dati, esso ricorre a tabelle a loro volta organizzate in colonne e righe. All’interno di ogni colonna i dati immagazzinati devono essere tra loro omogenei, cioè essere dello stesso tipo.

Dichiarare i tipi di dato

Quando si definisce la struttura di una tabella bisogna dichiarare, per ciascuna colonna, il tipo di dato che essa dovrà ospitare: testo, numeri, date, ecc.

La dichiarazione del tipo di dato deve essere fatta al momento della creazione della tabella ma può essere cambiata anche successivamente. La modifica del tipo di dato, tuttavia, è una operazione non sempre semplicissima quando la tabella ospita già dei dati al suo interno: per cambiare il tipo di dato, infatti, è necessario che i dati già presenti nella colonna siano compatibili con esso!

E’ bene, quindi, prestare la massima attenzione in fase di creazione delle tabelle nella definizione dei giusti tipi di dato.

I tipi di dato di SQL

Ogni DBMS ha i "suoi" tipi di dato, di seguito elencheremo le tipologie più diffuse che risultano essere presenti in tutti i principali database in commercio tralasciando, invece, i tipi di dati peculiari di specifici DBMS per i quali si rimanda a documentazioni dedicate.

Tipi di dati numerici

  • INT, BIGINT e SMALLINT: INT rappresenta i valori interi (senza cifre decimali), BIGINT e SMALLINT rappresentano, rispettivamente, numeri interi molto grandi o non troppo grandi (BIGINT e SMALLINT vengono usati in casi specifici)
  • NUMERIC e DECIMAL: sono utilizzati per rappresentare i numeri decimali
  • REAL, DOUBLE e FLOAT: sono utilizzati per i numeri approssimativi

Facciamo qualche esempio: se una colonna viene dichiarata come INT potrà ospitare al suo interno solo valori numerici interi. Se viene dichiarata NUMERIC (o DECIMAL) sarà possibile definirne precisione e scala:

NUMERIC(precisione, scala)

Queste rappresentano, rispettivamente, il numero di cifre totali che ospiterà il campo e il numero di cifre dopo la virgola, più precisamente:

  • precisione è il numero totale di cifre (>= 0)
  • scala (> 0 e < precisione)

Tipi di dati stringa (testo)

  • CHAR: è utilizzato per ospitare stringhe di lunghezza fissa; il valore minimo è 1 il massimo cambia a seconda del DBMS utilizzato (in MySQL è 255)
  • VARCHAR: è utilizzato per ospitare stringhe di lunghezza variabile (viene specificata la lunghezza massima)

Facciamo un esempio: se una colonna viene dichiarata CHAR(5) essa potrà ospitare stringhe di testo lunghe sempre 5 caratteri. Se viene inserito un valore testuale più corto il sistema aggiungerà automaticamente degli spazi per raggiungere la lunghezza definita. Se si prova ad archiviare una stringa più lunga di 5 caratteri, viceversa, si riceverà un errore.

Nel caso di VARCHAR, invece, l’unica discriminante è la lunghezza massima.

Tipi di dato temporali

SQL definisce dei tipi temporali per permettere la gestione di date e ore. E’ importante precisare che il formato usato è quello anglosassone, cioè:

ANNO-MESE-GIORNO

e

ORA:MINUTI:SECONDI
  • DATE: rappresenta le date espresse come anno (4 cifre), mese (2 cifre comprese tra 1 e 12), giorno (2 cifre comprese tra 1 e 31 con ulteriori restrizioni a seconda del mese, ad es. febbraio può essere massimo 28 o 29 a seconda che l’anno sia bisestile o meno); i valori sono separati dal trattino (-)
  • TIME: rappresenta gli orari espressi nel formato ora (2 cifre), minuti (2 cifre) e secondi (2 cifre) separati dal simobolo dei due punti (:)
  • DATETIME: rappresenta data e orario, quest’ultimo con la precisione al millisecondo.

Tipi boleani

SQL prevede un tipo BOOLEAN appositamente previsto per la gestione di valori booleani (VERO/FALSO). Accetta come valore: TRUE, FALSE, 0 e 1.

Non tutti i DBMS supportano campi di questo tipo. In MySQL, ad esempio, per i valori booleani si è soliti utilizzare un campo numerico – TINYINT(1) – che verrà valorizzato come 0 (falso) o 1 (vero).

Il valore NULL

Valore NULL è una speciale costante presente in tutti i DBMS: esso rappresenta l’assenza di informazione. Ogni campo non valorizzato, a prescindere dal tipo di dato, può essere NULL.

Pubblicitร