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à.
CASTfunzione
La CAST funzione converte un tipo di dati in un altro tipo di dati compatibile. Ad esempio, puoi convertire una stringa in una data o un tipo numerico in una stringa. CASTesegue una conversione in fase di esecuzione, il che significa che la conversione non modifica il tipo di dati di un valore in una tabella di origine. Viene modificato solo nel contesto della query.
La CAST funzione è molto simile aCONVERTfunzione, in quanto entrambe convertono un tipo di dati in un altro, ma vengono chiamate in modo diverso.
Alcuni tipi di dati richiedono una conversione esplicita in altri tipi di dati utilizzando la CONVERT funzione CAST or. Altri tipi di dati possono essere convertiti implicitamente, come parte di un altro comando, senza utilizzare CAST o. CONVERT Per informazioni, consulta Conversione e compatibilità dei tipi.
Sintassi
Utilizza i seguenti due formati di sintassi equivalenti per convertire espressioni da un tipo di dati a un altro:
CAST ( expression AS type ) expression :: type
Argomenti
- espressione
-
Un'espressione che valuta uno o più valori, ad esempio un nome di colonna o un letterale. La conversione di valori null restituisce null. L'espressione non può contenere stringhe o spazi vuoti.
- tipo
-
Uno dei metodi supportati Tipi di dati.
Tipo restituito
CASTrestituisce il tipo di dati specificato dall'argomento type.
Nota
Amazon Redshift restituisce un errore se tenti di eseguire una conversione problematica, ad esempio una DECIMAL conversione che perde precisione, come la seguente:
select 123.456::decimal(2,1);
o una INTEGER conversione che causa un overflow:
select 12345678::smallint;
Esempi
Alcuni esempi utilizzano il TICKITdatabase di esempio. Per ulteriori informazioni sull'impostazione dei dati di esempio, consulta Load data.
Le seguenti due query sono equivalenti. Entrambi assegnano un valore decimale a un integer:
select cast(pricepaid as integer) from sales where salesid=100;
pricepaid ----------- 162 (1 row)
select pricepaid::integer from sales where salesid=100;
pricepaid ----------- 162 (1 row)
La seguente query produce un risultato simile. Non richiede dati di esempio per l'esecuzione:
select cast(162.00 as integer) as pricepaid;
pricepaid ----------- 162 (1 row)
In questo esempio, i valori in una colonna timestamp vengono convertiti come date, il che comporta la rimozione dell'ora da ogni risultato:
select cast(saletime as date), salesid from sales order by salesid limit 10;
saletime | salesid -----------+--------- 2008-02-18 | 1 2008-06-06 | 2 2008-06-06 | 3 2008-06-09 | 4 2008-08-31 | 5 2008-07-16 | 6 2008-06-26 | 7 2008-07-10 | 8 2008-07-22 | 9 2008-08-06 | 10 (10 rows)
Se non hai utilizzato CAST quanto illustrato nell'esempio precedente, i risultati includeranno l'ora: 18/02/2008 02:36:48.
La seguente query converte i dati di caratteri variabili in una data. Non richiede dati di esempio per l'esecuzione.
select cast('2008-02-18 02:36:48' as date) as mysaletime;
mysaletime -------------------- 2008-02-18 (1 row)
In questo esempio, il casting dei valori in una colonna di data viene eseguito come timestamps:
select cast(caldate as timestamp), dateid from date order by dateid limit 10;
caldate | dateid --------------------+-------- 2008-01-01 00:00:00 | 1827 2008-01-02 00:00:00 | 1828 2008-01-03 00:00:00 | 1829 2008-01-04 00:00:00 | 1830 2008-01-05 00:00:00 | 1831 2008-01-06 00:00:00 | 1832 2008-01-07 00:00:00 | 1833 2008-01-08 00:00:00 | 1834 2008-01-09 00:00:00 | 1835 2008-01-10 00:00:00 | 1836 (10 rows)
In questo esempio, un integer è assegnato come una stringa di caratteri:
select cast(2008 as char(4));
bpchar -------- 2008
In questo esempio, un valore DECIMAL (6,3) viene espresso come valore DECIMAL (4,1):
select cast(109.652 as decimal(4,1));
numeric --------- 109.7
Questo esempio mostra un'espressione più complessa. La PRICEPAID colonna (una colonna DECIMAL (8,2)) della SALES tabella viene convertita in una colonna DECIMAL (38,2) e i valori vengono moltiplicati per 100000000000000000000:
select salesid, pricepaid::decimal(38,2)*100000000000000000000 as value from sales where salesid<10 order by salesid;
salesid | value ---------+---------------------------- 1 | 72800000000000000000000.00 2 | 7600000000000000000000.00 3 | 35000000000000000000000.00 4 | 17500000000000000000000.00 5 | 15400000000000000000000.00 6 | 39400000000000000000000.00 7 | 78800000000000000000000.00 8 | 19700000000000000000000.00 9 | 59100000000000000000000.00 (9 rows)
Nota
Non è possibile eseguire un'CONVERToperazione CAST or sul tipo di dati per cambiarlo in un GEOMETRY
altro tipo di dati. Tuttavia, è possibile fornire una rappresentazione esadecimale di una stringa letterale in un noto formato esteso binary (EWKB) come input per funzioni che accettano un argomento. GEOMETRY
Ad esempio, la seguente funzione ST_AsText
si aspetta un tipo di dati GEOMETRY
.
SELECT ST_AsText('01010000000000000000001C400000000000002040');
st_astext ------------ POINT(7 8)
È anche possibile specificare esplicitamente il tipo di dati GEOMETRY
.
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
st_astext ------------ POINT(5 6)