CodeGym /Corsi /SQL SELF /Conversione dei tipi di dati con CAST() e :: — esempi e p...

Conversione dei tipi di dati con CAST() e :: — esempi e particolarità

SQL SELF
Livello 5, Lezione 3
Disponibile

Immagina di voler sommare due numeri, ma uno dei parametri è salvato come stringa. Oppure vuoi filtrare i dati per anno, ma la data è salvata nel formato completo con l’orario. PostgreSQL potrebbe non essere molto felice di questa cosa, e dovrai intervenire per portare i dati al tipo giusto.

La conversione dei tipi ti aiuta a:

  • Semplificare la gestione dei dati per usarli nei calcoli.
  • Creare dati più leggibili e strutturati per esportazione o analisi.
  • Eliminare errori legati a incompatibilità tra tipi di dati.

Basi della conversione dei tipi di dati: CAST() e ::

1. CAST() — il fratello maggiore di ogni conversione

La funzione CAST() è il modo “ufficiale” per convertire valori da un tipo di dato a un altro. Funziona come un traduttore universale.

Sintassi:

CAST(valore AS tipo_di_dato_destinazione)

Esempio 1: Conversione di una stringa in numero.

SELECT CAST('123' AS INTEGER); -- Risultato: 123

Esempio 2: Conversione di un numero in stringa.

SELECT CAST(123 AS TEXT); -- Risultato: '123'

Esempio 3: Conversione di una data in stringa.

SELECT CAST(NOW() AS TEXT); -- Risultato: '2023-10-25 15:00:00.000000'

2. Operatore :: — alternativa compatta

Se CAST() ti sembra un po’ prolisso, PostgreSQL offre la sintassi ::. È un modo abbreviato per convertire, molto popolare proprio perché è super corto.

Sintassi:

valore::tipo_di_dato_destinazione

Esempio 1: Conversione di una stringa in numero.

SELECT '123'::INTEGER; -- Risultato: 123

Esempio 2: Conversione di un numero in stringa.

SELECT 123::TEXT; -- Risultato: '123'

Esempio 3: Conversione di una data in stringa.

SELECT NOW()::TEXT; -- Risultato: '2023-10-25 15:00:00.000000'

Esempi reali di uso della conversione dei tipi

1. Conversione tra numeri e stringhe

Supponiamo che tu abbia una tabella students dove la colonna student_id è salvata come stringa, ma vuoi confrontarla con un valore numerico. Senza conversione non funziona.

student_id first_name last_name birth_date grade
101 Alex Lin 2008-03-15 9
102 Maria Chi 2009-07-22 8
103 Axel Ivy 2007-11-30 10
104 Nat Sok 2008-01-18 9
105 Pol Frez 2009-05-05 8

Quindi nella query devi convertire esplicitamente la colonna student_id in numero:

SELECT *
FROM students
WHERE student_id::INTEGER = 101;

Query analoga usando CAST():

SELECT *
FROM students
WHERE CAST(student_id AS INTEGER) = 101;

Conversione delle date

Quando vuoi estrarre una parte della data o convertirla in stringa, anche qui la conversione dei tipi ti salva. Per esempio, hai una tabella courses con le date di inizio corso nella colonna start_date.

course_id course_name start_date
1 Introduzione a Python 2025-01-15
2 Basi di SQL 2025-03-01
3 Analisi dei dati 2025-05-10
4 Sviluppo web 2025-06-20
5 Machine learning 2025-09-05

Esempio: Estrarre l’anno come numero.

SELECT start_date::DATE, start_date::TEXT, start_date::TIMESTAMP
FROM courses;

Il risultato sarà così:

start_date (DATE) start_date (TEXT) start_date (TIMESTAMP)
2025-01-15 2025-01-15 2025-01-15 00:00:00
2025-03-01 2025-03-01 2025-03-01 00:00:00
2025-05-10 2025-05-10 2025-05-10 00:00:00
2025-06-20 2025-06-20 2025-06-20 00:00:00
2025-09-05 2025-09-05 2025-09-05 00:00:00

Esempio: Convertire la data in una “stringa pulita”.

SELECT TO_CHAR(start_date, 'DD-MM-YYYY')

Il risultato sarà così:

to_char
15-01-2025
01-03-2025
10-05-2025
20-06-2025
05-09-2025

Errore: Quando la conversione si rompe?

Il trucco della conversione dei dati non funziona sempre. A volte PostgreSQL ti fa capire chiaramente che “non capisce” le tue intenzioni. Ecco un esempio classico: provi a convertire un testo che sembra un numero, ma dentro ci sono caratteri in più.

Esempio di errore:

SELECT '123abc'::INTEGER;
-- ERRORE:  sintassi di input non valida per il tipo integer: "123abc"

Per evitare questi problemi, assicurati che i dati possano davvero essere convertiti nel tipo di destinazione in anticipo. Ad esempio, puoi usare espressioni regolari o controlli aggiuntivi.

2
Compito
SQL SELF, livello 5, lezione 3
Bloccato
Conversione di una stringa in un numero
Conversione di una stringa in un numero
2
Compito
SQL SELF, livello 5, lezione 3
Bloccato
Conversione delle date e calcoli
Conversione delle date e calcoli
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION