Conversione e compatibilità dei tipi - AWS Clean Rooms

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Conversione e compatibilità dei tipi

La discussione seguente descrive come funzionano le regole di conversione dei tipi e la compatibilità dei tipi di dati. AWS Clean Rooms

Compatibilità

La corrispondenza dei tipi di dati e la corrispondenza di valori letterali e costanti con tipi di dati avviene durante diverse operazioni di database, comprese le seguenti:

  • Operazioni DML (Data Manipulation Language) sulle tabelle

  • Query UNION, INTERSECT ed EXCEPT

  • Espressioni CASE

  • Valutazione di predicati, come LIKE e IN

  • Valutazione di funzioni SQL che effettuano confronti o estrazioni di dati

  • Confronti con operatori matematici

I risultati di queste operazioni dipendono dalle regole di conversione dei tipi e dalla compatibilità dei tipi di dati. La compatibilità implica che non è sempre richiesta la one-to-one corrispondenza tra un determinato valore e un determinato tipo di dati. Poiché alcuni tipi di dati sono compatibili, è possibile una conversione implicita o una coercizione. Per ulteriori informazioni, consulta Tipi di conversione implicita. Quando i tipi di dati non sono compatibili, a volte è possibile convertire un valore da un tipo di dati a un altro usando una funzione di conversione esplicita.

Regole generali di conversione e compatibilità

Osserva le seguenti regole di conversione e compatibilità:

  • In generale, i tipi di dati che rientrano nella stessa categoria (come diversi tipi di dati numerici) sono compatibili ed è possibile convertirli in modo implicito.

    Ad esempio, con la conversione implicita è possibile inserire un valore decimale in una colonna intera. Il decimale viene arrotondato per produrre un numero intero. Altrimenti, è possibile estrarre un valore numerico, come 2008, da una data e inserirlo nella colonna intera.

  • I tipi di dati numerici applicano le condizioni di overflow che si verificano quando si tenta di inserire valori. out-of-range Ad esempio, un valore decimale con una precisione di 5 non rientra in una colonna decimale che è stata definita con una precisione di 4. Un numero intero o l'intera parte di un decimale non viene mai troncato. Tuttavia, la parte frazionaria di un decimale può essere arrotondata per eccesso o per difetto, a seconda dei casi. Tuttavia, i risultati di espliciti cast di valori selezionati dalle tabelle non sono arrotondati.

  • Sono compatibili diversi tipi di stringhe di caratteri. Le stringhe di colonna VARCHAR contenenti dati a byte singolo e le stringhe di colonna CHAR sono comparabili e convertibili implicitamente. Le stringhe VARCHAR che contengono dati multibyte non sono confrontabili. Inoltre, è possibile convertire una stringa di caratteri in una data, ora, timestamp o valore numerico se la stringa è un valore letterale appropriato. Tutti gli spazi iniziali o finali vengono ignorati. Per contro, è possibile convertire un valore numero, timestamp o data in una stringa di caratteri a lunghezza variabile o fissa.

    Nota

    È necessario che una stringa di caratteri per la quale si desidera eseguire il cast a un tipo numerico contenga una rappresentazione in caratteri di un numero. Ad esempio, è possibile eseguire il cast delle stringhe '1.0' o '5.9' dei valori decimali, ma non è possibile eseguire il cast della stringa 'ABC' in alcun tipo numerico.

  • Se si confrontano i valori DECIMAL con le stringhe di caratteri, AWS Clean Rooms tenta di convertire la stringa di caratteri in un valore DECIMAL. Quando si confrontano tutti gli altri valori numerici con stringhe di caratteri, i valori numerici vengono convertiti in stringhe di caratteri. Per applicare la conversione opposta (ad esempio, convertire le stringhe di caratteri in numeri interi o convertire i valori DECIMAL in stringhe di caratteri), usa una funzione esplicita, ad esempio, Funzione CAST.

  • Per convertire valori DECIMAL o NUMERIC a 64 bit in una precisione più elevata, è necessario usare una funzione di conversione specifica come le funzioni CAST o CONVERT.

  • Quando si convertono DATE o TIMESTAMP in TIMESTAMPTZ o si converte TIME in TIMESTAMPTZ, il fuso orario viene impostato sul fuso orario della sessione attuale. Il fuso orario della sessione è UTC per impostazione predefinita.

  • Allo stesso modo, TIMESTAMPTZ viene convertito in DATE, TIME o TIMESTAMP sulla base del fuso orario della sessione corrente. Il fuso orario della sessione è UTC per impostazione predefinita. Dopo la conversione, le informazioni sul fuso orario vengono rimosse.

  • Le stringhe di caratteri che rappresentano un timestamp con fuso orario specificato vengono convertite in TIMESTAMPTZ usando il fuso orario della sessione corrente, che di default è UTC. Analogamente, le stringhe di caratteri che rappresentano un tempo con fuso orario specificato vengono convertite in TIMETZ usando il fuso orario della sessione attuale, che per impostazione predefinita è UTC.

Tipi di conversione implicita

Ci sono due tipi di conversione implicita:

  • Conversioni implicite nelle assegnazioni, come l'impostazione di valori nei comandi INSERT o UPDATE

  • Conversioni implicite nelle espressioni, ad esempio l'esecuzione di confronti nella clausola WHERE

La tabella seguente elenca i tipi di dati che possono essere convertiti implicitamente in assegnazioni o espressioni. È anche possibile usare una funzione di conversione esplicita per eseguire queste conversioni.

Dal tipo Al tipo
BIGINT BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER
REAL (FLOAT4)
SMALLINT
VARCHAR
CHAR VARCHAR
DATE CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT
CHAR
DOUBLE PRECISION (FLOAT8)
INTERO (INT)
REAL (FLOAT4)
SMALLINT
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT
CHAR
DECIMAL (NUMERIC)
INTERO (INT)
REAL (FLOAT4)
SMALLINT
VARCHAR
INTERO (INT) BIGINT
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT
VARCHAR
REAL (FLOAT4) BIGINT
CHAR
DECIMAL (NUMERIC)
INTERO (INT)
SMALLINT
VARCHAR
SMALLINT BIGINT
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTERO (INT)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
DATE
VARCHAR
TIMESTAMPTZ
TIME
TIMESTAMPTZ CHAR
DATE
VARCHAR
TIMESTAMP
TIMETZ
TIME VARCHAR
TIMETZ
TIMETZ VARCHAR
TIME
Nota

Le conversioni implicite tra TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ o stringhe di caratteri usano il fuso orario della sessione corrente.

Il tipo di dati VARBYTE non può essere convertito implicitamente in nessun altro tipo di dati. Per ulteriori informazioni, consulta Funzione CAST.