Funzione cast
Si applica a: Databricks SQL Databricks Runtime
Esegue il cast del valore expr
al tipo di dati di destinazione type
. Questo operatore è un sinonimo di operatore :: (segno due punti)
Sintassi
cast(sourceExpr AS targetType)
Argomenti
-
sourceExpr
: qualsiasi espressione castable. -
targetType
: tipo di dati del risultato.
Valori restituiti
Il risultato è di tipo targetType
.
Le combinazioni seguenti di cast dei tipi di dati sono valide:
Origine (riga) Target (column) | VOID | numeric | CORDA | DATE | TIMESTAMP | TIMESTAMP_NTZ | intervallo anno-mese | intervallo di tempo del giorno | BOOLEANO | BINARIO | ARRAY | MAPPA | STRUCT | VARIANTE | OGGETTO |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | S | S | S | S | S | S | S | S | S | S | S | S | S | S | N |
numeric | N | S | S | N | S | N | S | S | S | N | N | N | N | S | N |
CORDA | N | S | S | S | S | S | S | S | S | S | N | N | N | S | N |
DATE | N | N | S | S | S | S | N | N | N | N | N | N | N | S | N |
TIMESTAMP | N | S | S | S | S | S | N | N | N | N | N | N | N | S | N |
TIMESTAMP_NTZ | N | N | S | S | S | S | N | N | N | N | N | N | N | S | N |
intervallo anno-mese | N | S | S | N | N | N | S | N | N | N | N | N | N | N | N |
intervallo di tempo del giorno | N | S | S | N | N | N | N | S | N | N | N | N | N | N | N |
BOOLEANO | N | S | S | N | S | N | N | N | S | N | N | N | N | S | N |
BINARIO | N | S | S | N | N | N | N | N | N | S | N | N | N | S | N |
ARRAY | N | N | S | N | N | N | N | N | N | N | S | N | N | S | N |
MAPPA | N | N | S | N | N | N | N | N | N | N | N | S | N | N | N |
STRUCT | N | N | S | N | N | N | N | N | N | N | N | N | S | N | N |
VARIANTE | N | S | S | S | S | S | N | N | S | S | S | S | S | S | N |
OGGETTO | N | N | N | N | N | N | N | N | N | N | N | S | S | N | N |
Regole e limitazioni basate su targetType
Avviso
In Databricks Runtime, se spark.sql.ansi.enabled è false
, un overflow non causerà un errore, ma invece eseguirà il wrapping del risultato.
Un sourceExpr
valore con un formato non valido o caratteri non validi per targetType
genererà un oggetto NULL
.
numeric
Se è targetType
un valore numerico ed sourceExpr
è di tipo :
-
Il risultato è un
NULL
oggetto del tipo numerico specificato. -
Se
targetType
è un valore numerico integrale, il risultato vienesourceExpr
troncato a un numero intero.In caso contrario, il risultato viene
sourceExpr
arrotondato a una adatta alla scala disponibile ditargetType
.Se il valore non è compreso nell'intervallo di
targetType
, viene generato un errore di overflow.Usare try_cast per trasformare gli errori di overflow in
NULL
. -
sourceExpr
viene letto come valore letterale dell'oggettotargetType
.Se
sourceExpr
non è conforme al formato del valore letterale values, viene generato un errore.Se il valore non è compreso nell'intervallo di
targetType
, viene generato un errore di overflow.Usare try_cast per trasformare gli errori di overflow e di formato non validi in
NULL
. -
Il risultato è il numero di secondi trascorsi tra
1970-01-01 00:00:00 UTC
esourceExpr
.Se
targetType
è un valore numerico integrale, il risultato viene troncato a un numero intero.In caso contrario, il risultato viene arrotondato a una adatta alla scala disponibile di
targetType
.Se il risultato non è compreso nell'intervallo di
targetType
, viene generato un errore di overflow.Usare try_cast per trasformare gli errori di overflow in
NULL
. -
Si applica a: Databricks SQL Databricks Runtime 11.3 LTS e versioni successive
Il tipo di destinazione deve essere un valore numerico esatto.
Dato che
INTERVAL upper_unit TO lower_unit
un risultato viene misurato nel numero totale dilower_unit
.lower_unit
Se èSECOND
, i secondi frazionari vengono archiviati a destra del separatore decimale. Per tutti gli altri intervalli, il risultato è sempre un numero integrale. -
Se
sourceExpr
è:-
true
: il risultato è 1. -
false
: il risultato è 0. -
NULL
: il risultato èNULL
.
-
-
Si applicano le regole del tipo del valore effettivo del
VARIANT
tipo.
Esempi
> SELECT cast(NULL AS INT);
NULL
> SELECT cast(5.6 AS INT);
5
> SELECT cast(5.6 AS DECIMAL(2, 0));
6
> SELECT cast(-5.6 AS INT);
-5
> SELECT cast(-5.6 AS DECIMAL(2, 0));
-6
> SELECT cast(128 AS TINYINT);
Overflow
> SELECT cast(128 AS DECIMAL(2, 0));
Overflow
> SELECT cast('123' AS INT);
123
> SELECT cast('123.0' AS INT);
Invalid format
> SELECT cast(TIMESTAMP'1970-01-01 00:00:01' AS LONG);
1
> SELECT cast(TIMESTAMP'1970-01-01 00:00:00.000001' AS DOUBLE);
1.0E-6
> SELECT cast(TIMESTAMP'2022-02-01 00:00:00' AS SMALLINT);
error: overflow
> SELECT cast(true AS BOOLEAN);
1
> SELECT cast(INTERVAL '1-2' YEAR TO MONTH AS INTEGER);
14
> SELECT cast(INTERVAL '1:30.5' MINUTE TO SECOND AS DECIMAL(5, 2));
90.50
> SELECT cast(TRUE AS INT);
1
> SELECT cast(FALSE AS INT);
0
> SELECT cast('15'::VARIANT AS INT);
15
STRING
Se il sourceExpr
è un STRING
il STRING
risultante eredita le regole di confronto di sourceExpr
.
In tutti gli altri casi, la collazione del STRING
risultante è la collazione predefinita .
Per modificare le regole di confronto, aggiungere l'espressione collate.
targetType
Se è un tipo STRING e sourceExpr
è di tipo :
-
Il risultato è una
NULL
stringa. -
Il risultato è il numero letterale con un segno meno facoltativo e senza zeri iniziali ad eccezione della singola cifra a sinistra del separatore decimale.
targetType
Se èDECIMAL(p, s)
cons
maggiore 0, viene aggiunto un separatore decimale e gli zeri finali vengono aggiunti fino alla scala. -
Se il numero assoluto è minore
10,000,000
di e maggiore o uguale0.001
a , il risultato viene espresso senza notazione scientifica con almeno una cifra su entrambi i lati del separatore decimale.In caso contrario, Azure Databricks usa una mantissa seguita da
E
e un esponente. La mantissa ha un segno meno iniziale facoltativo seguito da una cifra a sinistra del separatore decimale e il numero minimo di cifre maggiore di zero a destra. L'esponente ha e segno meno iniziale facoltativo. -
Se l'anno è compreso tra il 9999 e il 9999 CE, il risultato è una dataString della forma
-YYYY-MM-DD
eYYYY-MM-DD
rispettivamente.Per gli anni precedenti o successivi a questo intervallo, il numero necessario di cifre viene aggiunto al componente year e
+
viene usato per la ce. -
Se l'anno è compreso tra il 9999 e il 9999 CE, il risultato è un timestampString della forma
-YYYY-MM-DD hh:mm:ss
eYYYY-MM-DD hh:mm:ss
rispettivamente.Per gli anni precedenti o successivi a questo intervallo, il numero necessario di cifre viene aggiunto al componente year e
+
viene usato per la ce.Se necessario, vengono aggiunti secondi
.f...
frazionari. -
Se l'anno è compreso tra il 9999 e il 9999 CE, il risultato è un timestampString della forma
-YYYY-MM-DD hh:mm:ss
eYYYY-MM-DD hh:mm:ss
rispettivamente.Per gli anni precedenti o successivi a questo intervallo, il numero necessario di cifre viene aggiunto al componente year e
+
viene usato per la ce.Se necessario, vengono aggiunti secondi
.f...
frazionari. -
Il risultato è la rappresentazione più breve del valore letterale interval. Se l'intervallo è negativo, il segno viene incorporato in
interval-string
. Per le unità inferiori a 10,zeri iniziali vengono omessi.Una stringa di intervallo di anno-mese tipica ha il formato seguente:
INTERVAL 'Y' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
intervallo di tempo del giorno
Il risultato è la rappresentazione più breve del valore letterale interval. Se l'intervallo è negativo, il segno viene incorporato in
interval-string
. Per le unità inferiori a 10, gli zeri iniziali vengono omessi.Una stringa tipica dell'intervallo di tempo del giorno ha il formato seguente:
INTERVAL 'D' DAY
INTERVAL 'D h' DAY TO HOUR
INTERVAL 'D h:m' DAY TO MINUTE
INTERVAL 'D h:m:s' DAY TO SECOND
INTERVAL 'h' HOUR
INTERVAL 'h:m' HOUR TO MINUTE
INTERVAL 'm:s' MINUTE TO SECOND
INTERVAL 's' SECOND
-
Il risultato del
true
valore booleano è ilSTRING
valore letteraletrue
. Sifalse
tratta del valore letteralefalse
STRING. PerNULL
è la stringa NULL. -
Un risultato è il file binario
sourceExpr
interpretato come sequenza di caratteri UTF-8.Azure Databricks non convalida i caratteri UTF-8. Un cast da
BINARY
aSTRING
non inserisce mai caratteri di sostituzione o genera un errore. -
Il risultato è un elenco di elementi cast, delimitato da virgole list e racchiuso tra parentesi quadre
[ ]
. Uno spazio segue ogni virgola. UnNULL
elemento viene convertito in un valore letteralenull
.Azure Databricks non virgolette o contrassegna in altro modo singoli elementi, che possono contenere parentesi quadre o virgole.
-
Il risultato è un list delimitato da virgole di coppie chiave-valore cast, racchiuse tra parentesi graffe
{ }
. Uno spazio segue ogni virgola. Ogni coppia di valori di chiave è separata da un oggetto->
. UnNULL
valore della mappa viene convertito in un valore letteralenull
.Azure Databricks non mette tra virgolette né contrassegna altrimenti le singole chiavi o values, i quali possono contenere parentesi graffe, virgole o
->
. -
Il risultato è un list delimitato da virgole del campo cast values, racchiuso tra parentesi graffe
{ }
. Uno spazio segue ogni virgola. UnNULL
valore di campo viene convertito in un valore letteralenull
.Azure Databricks non racchiude tra virgolette né contrassegna in altro modo i singoli campi values, che possono contenere parentesi graffe o virgole.
-
Si applicano le regole del tipo del valore effettivo del
VARIANT
tipo.
Esempi
> SELECT cast(NULL AS STRING);
NULL
> SELECT cast(-3Y AS STRING);
-3
> SELECT cast(5::DECIMAL(10, 5) AS STRING);
5.00000
> SELECT cast(12345678e-4 AS STRING);
1234.5678
> SELECT cast(1e7 as string);
1.0E7
> SELECT cast(1e6 as string);
1000000.0
> SELECT cast(1e-4 as string);
1.0E-4
> SELECT cast(1e-3 as string);
0.001
> SELECT cast(12345678e7 AS STRING);
1.2345678E14
> SELECT cast(DATE'1900-12-31' AS STRING);
1900-12-31
-- Caesar no more
> SELECT cast(DATE'-0044-03-15' AS STRING);
-0044-03-15
> SELECT cast(DATE'100000-12-31' AS STRING);
+100000-12-31
> SELECT cast(current_timestamp() AS STRING);
2022-04-02 22:29:09.783
> SELECT cast(TIMESTAMP_NTZ'2023-01-01' AS STRING);
2023-01-01 00:00:00
> SELECT cast(INTERVAL -'13-02' YEAR TO MONTH AS STRING);
INTERVAL '-13-2' YEAR TO MONTH
> SELECT cast(INTERVAL '12:04.9900' MINUTE TO SECOND AS STRING);
INTERVAL '12:04.99' MINUTE TO SECOND
> SELECT cast(true AS STRING);
true
> SELECT cast(false AS STRING);
false
-- A bad UTF-8 string
> SELECT cast(x'33800033' AS STRING);
3�3
> SELECT hex(cast(x'33800033' AS STRING));
33800033
> SELECT cast(array('hello', NULL, 'world') AS STRING);
[hello, null, world]
> SELECT cast(array('hello', 'wor, ld') AS STRING);
[hello, wor, ld]
> SELECT cast(array() AS STRING);
[]
> SELECT cast(map('hello', 1, 'world', null) AS STRING);
{hello -> 1, world -> null}
> SELECT cast(map('hello -> 1', DATE'2022-01-01') AS STRING);
{hello -> 1 -> 2022-01-01}
> SELECT cast(map() AS STRING);
{}
> SELECT cast(named_struct('a', 5, 'b', 6, 'c', NULL) AS STRING);
{5, 6, null}
> SELECT cast(named_struct() AS STRING);
{}
> SELECT cast(DATE'2024-01-05'::VARIANT AS STRING);
2024-01-05
> SELECT cast(5 AS STRING) COLLATE UNICODE;
5
DATE
Se è targetType
un tipo DATE e sourceExpr
è di tipo :
-
Il risultato è un oggetto
NULL
DATE
. -
sourceExpr
deve essere un valore dateString valido.Se
sourceExpr
non è un valore validodateString
, Azure Databricks restituisce un errore.Usare try_cast per trasformare gli errori di dati non validi in
NULL
. -
Il risultato è la parte data del timestamp
sourceExpr
. -
Il risultato è la parte data del timestamp_ntz
sourceExpr
. -
Si applicano le regole di tipo per il valore effettivo mantenuto dal
VARIANT
tipo di dati.
Esempi
> SELECT cast(NULL AS DATE);
NULL
> SELECT cast('1900-10-01' AS DATE);
1900-10-01
> SELECT cast('1900-10-01' AS DATE);
1900-10-01
-- There is no February 30.
> SELECT cast('1900-02-30' AS DATE);
Error
> SELECT cast(TIMESTAMP'1900-10-01 12:13:14' AS DATE);
1900-10-01
> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14' AS DATE);
1900-10-01
> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14'::VARIANT AS DATE);
1900-10-01
TIMESTAMP
Se è targetType
un tipo TIMESTAMP e sourceExpr
è di tipo :
-
Il risultato è un oggetto
NULL
DATE
. -
sourceExpr
viene letto come numero di secondi da1970-01-01 00:00:00 UTC
.Le frazioni inferiori ai microsecondi vengono troncate.
Se il valore non è compreso nell'intervallo di
TIMESTAMP
, viene generato un errore di overflow.Usare try_cast per trasformare gli errori di overflow in
NULL
. -
sourceExpr
deve essere un timestampString valido.Se
sourceExpr
non è un valore validotimestampString
, Azure Databricks restituisce un errore.Usare try_cast per trasformare gli errori di dati non validi in
NULL
. -
Il risultato è l'ora
sourceExpr
DATE
00:00:00
.
Il risultato è un valore timestamp con gli stessi campi year/month/day/hour/minute/second di timestamp_ntz sourceExpr
.
-
Si applicano le regole di tipo per il valore effettivo mantenuto dal
VARIANT
tipo di dati.
Esempi
> SELECT cast(NULL AS TIMESTAMP);
NULL
> SET TIME ZONE '+00:00';
> SELECT cast(0.0 AS TIMESTAMP);
1970-01-01 00:00:00
> SELECT cast(0.0000009 AS TIMESTAMP);
1970-01-01 00:00:00
> SELECT cast(1e20 AS TIMESTAMP);
Error: overflow
> SELECT cast('1900' AS TIMESTAMP);
1900-01-01 00:00:00
> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP);
1900-10-01 12:13:14
> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP);
Error
> SELECT cast(DATE'1900-10-01' AS TIMESTAMP);
1900-10-01 00:00:00
> SELECT cast(TIMESTAMP_NTZ'2023-01-01 02:03:04.567' as TIMESTAMP)
2023-01-01 02:03:04.567
> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP);
1900-10-01 00:00:00
TIMESTAMP_NTZ
targetType
Se è un tipo di TIMESTAMP_NTZ e sourceExpr
è di tipo :
-
Il risultato è un oggetto
NULL
DATE
. -
sourceExpr
deve essere un timestampString valido.Se
sourceExpr
non è un valore validotimestampString
, Azure Databricks restituisce un errore.Usare try_cast per trasformare gli errori di dati non validi in
NULL
. -
Il risultato è date
sourceExpr
alle00:00:00
ore. -
Il risultato è l'ora
sourceExpr
locale come nel fuso orario della sessione. -
Si applicano le regole di tipo per il valore effettivo mantenuto dal
VARIANT
tipo di dati.
Esempi
> SELECT cast(NULL AS TIMESTAMP_NTZ);
NULL
> SELECT cast('1900' AS TIMESTAMP_NTZ);
1900-01-01 00:00:00
> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP_NTZ);
1900-10-01 12:13:14
> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP_NTZ);
Error
> SELECT cast(DATE'1900-10-01' AS TIMESTAMP_NTZ);
1900-10-01 00:00:00
> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28' as TIMESTAMP_NTZ);
America/Los_Angeles 2021-07-01 08:43:28
> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28UTC+3' as TIMESTAMP_NTZ);
America/Los_Angeles 2021-06-30 22:43:28
> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP_NTZ);
1900-10-01 00:00:00
intervallo anno-mese
Se è targetType
un intervallo di anno e sourceExpr
è di tipo :
-
Il risultato è un
NULL
intervallo di anno-mese. -
Si applica a: Databricks SQL Databricks Runtime 11.3 LTS e versioni successive
Il valore numerico viene interpretato come numero di unità inferiori dell'annomonthIntervalQualifier
targetType
. -
sourceExpr
deve essere un anno validoMonthIntervalString.Se
sourceExpr
non è un valore validoyearMonthIntervalString
, Azure Databricks restituisce un errore.Usare try_cast per trasformare gli errori di dati non validi in
NULL
. -
Se yearMonthIntervalQualifier
targetType
includeMONTH
il valore rimane invariato, ma viene reinterpretato in modo che corrisponda al tipo di destinazione.In caso contrario, se il tipo di origine yearMonthIntervalQualifier include
MONTH
, il risultato viene troncato per anni completi.
Esempi
> SELECT cast(NULL AS INTERVAL YEAR);
NULL
> SELECT cast('1-4' AS INTERVAL YEAR TO MONTH)::STRING;
INTERVAL '1-4' YEAR TO MONTH
> SELECT cast('1' AS INTERVAL YEAR TO MONTH);
error
> SELECT cast(INTERVAL '1-4' YEAR TO MONTH AS INTERVAL MONTH)::STRING;
INTERVAL '16' MONTH
> SELECT cast(14 AS INTERVAL YEAR TO MONTH)::STRING;
INTERVAL '1-2' YEAR TO MONTH
> SELECT cast(INTERVAL '1-11' YEAR TO MONTH AS INTERVAL YEAR)::STRING;
INTERVAL '1' YEAR
intervallo di tempo del giorno
-
Il risultato è un
NULL
intervallo di tempo di giorno. -
Si applica a: Databricks SQL Databricks Runtime 11.3 LTS e versioni successive
Il valore numerico viene interpretato come numero di unità inferiori di
targetType
dayTimeIntervalQualifier. Se l'unità èSECOND
qualsiasi frazione viene interpretata come secondi frazionari. -
sourceExpr
deve essere un dayTimeIntervalString valido.Se
sourceExpr
non è un valore validodayTimeIntervalString
, Azure Databricks restituisce un errore.Usare try_cast per trasformare gli errori di dati non validi in
NULL
. intervallo di tempo del giorno
Se dayTimeIntervalQualifier include l'unità più piccola del tipo di
targetType
, il valore rimane invariato, ma viene reinterpretato in modo che corrisponda al tipo di destinazione.In caso contrario, l'intervallo
sourceExpr
viene troncato per adattarsi all'oggettotargetType
.
> SELECT cast(NULL AS INTERVAL HOUR);
NULL
> SELECT cast('1 4:23' AS INTERVAL DAY TO MINUTE)::STRING;
INTERVAL '1 04:23' DAY TO MINUTE
> SELECT cast('1' AS INTERVAL DAY TO MINUTE);
error
> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL MINUTE)::STRING;
INTERVAL '1703' MINUTE
> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL HOUR)::STRING;
INTERVAL '28' HOUR
> SELECT cast(125.3 AS INTERVAL MINUTE TO SECOND)::STRING;
INTERVAL '2:5.3' MINUTE TO SECOND
BOOLEAN
targetType
Se è un valore BOOLEAN e sourceExpr
è di tipo:
-
Il risultato è di
NULL
tipoBOOLEAN
. -
Se
sourceExpr
è:0
: il risultato èfalse
.-
NULL
: il risultato èNULL
. -
special floating point value
: il risultato ètrue
.
In caso contrario, il risultato è
true
.-
-
Se
sourcEexpr
è (senza distinzione tra maiuscole e minuscole):-
'T', 'TRUE', 'Y', 'YES', or '1'
: il risultato ètrue
-
'F', 'FALSE', 'N', 'NO', or '0'
: il risultato èfalse
-
NULL
: il risultato èNULL
In caso contrario, Azure Databricks restituisce una sintassi di input non valida per l'errore booleano di tipo.
Usare try_cast per trasformare gli errori di dati non validi in
NULL
. -
-
Si applicano le regole del tipo del valore effettivo del
VARIANT
tipo.
Esempi
> SELECT cast(NULL AS BOOLEAN);
NULL
> SELECT cast('T' AS BOOLEAN);
true
> SELECT cast('True' AS BOOLEAN);
true
> SELECT cast('1' AS BOOLEAN);
true
> SELECT cast('0' AS BOOLEAN);
false
> SELECT cast('n' AS BOOLEAN);
false
> SELECT cast('on' AS BOOLEAN);
error: invalid input syntax for type boolean
> SELECT cast(0 AS BOOLEAN);
false
> SELECT cast(0.0E10 AS BOOLEAN);
false
> SELECT cast(1 AS BOOLEAN);
true
> SELECT cast(0.1 AS BOOLEAN);
true
> SELECT cast('NaN'::FLOAT AS BOOLEAN);
true
> SELECT cast(1::VARIANT AS BOOLEAN);
true
BINARY
targetType
Se è binary e sourceExpr
è di tipo:
-
Il risultato è di
NULL
tipoBINARY
. -
Il risultato è la codifica UTF-8 dell'oggetto
surceExpr
. -
Si applicano le regole di tipo per il valore effettivo mantenuto dal
VARIANT
tipo di dati.
Esempi
> SELECT cast(NULL AS BINARY);
NULL
> SELECT hex(cast('Spark SQL' AS BINARY));
537061726B2053514C
> SELECT hex(cast('Oдesa' AS BINARY));
4FD0B4657361
> SELECT hex(cast('Oдesa'::VARIANT AS BINARY));
4FD0B4657361
ARRAY
Se è targetType
un < array targetElementType > e sourceExpr
è di tipo:
-
Il risultato è un
NULL
oggetto dell'oggettotargeType
. -
Se il cast da
sourceElementType
atargetElementType
è supportato, il risultato è unARRAY<targetElementType>
oggetto con tutti gli elementi di cui è stato eseguito iltargetElementType
cast a .Azure Databricks genera un errore se il cast non è supportato o se non è possibile eseguire il cast di uno degli elementi.
Usare try_cast per trasformare gli errori di overflow o dati non validi in
NULL
. -
Si applicano le regole di tipo per il valore effettivo mantenuto dal
VARIANT
tipo di dati.
Esempi
> SELECT cast(NULL AS ARRAY<INT>);
NULL
> SELECT cast(array('t', 'f', NULL) AS ARRAY<BOOLEAN>);
[true, false, NULL]
> SELECT cast(array('t', 'f', NULL) AS INTERVAL YEAR);
error: cannot cast array<string> to interval year
> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
error: invalid input syntax for type boolean: o.
> SELECT cast(array('t', 'f', NULL)::VARIANT AS ARRAY<BOOLEAN>);
[true, false, NULL]
MAP
targetType
Se è un targetKeyType MAP<, targetValueType > e sourceExpr
è di tipo:
-
Il risultato è un
NULL
oggetto dell'oggettotargetType
. MAP <sourceKeyType, sourceValueType >
Se sono supportati i cast da
sourceKeyType
atargetKeyType
esourceValueType
atargetValueType
, il risultato è unMAP<targetKeyType, targetValueType>
con tutte le chiavi convertite atargetKeyType
e tutti i values convertiti atargetValueType
.Azure Databricks genera un errore se il cast non è supportato oppure se non è possibile eseguire il cast di una qualsiasi delle chiavi o di values.
Usare try_cast per trasformare gli errori di overflow o dati non validi in
NULL
.-
Si applicano le regole di tipo per il valore effettivo mantenuto dal
VARIANT
tipo di dati. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Ogni
sourceFieldName
tipoSTRING
viene sottoposto a cast etargetKeyType
mappato a una chiave della mappa. Viene eseguito il castsourceFieldType
di ogni valore del campo ditargetValueType
origine ed è stato eseguito il mapping del rispettivo valore della mappa.Azure Databricks genera un errore se i cast non sono supportati o se non è possibile eseguire il cast di uno dei campi values o della chiave values.
Usare try_cast per trasformare gli errori di overflow o dati non validi in
NULL
.
Esempi
> SELECT cast(NULL AS MAP<STRING, INT>);
NULL
> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, BOOLEAN>);
{10 -> true, 15 -> false, 20 -> null}
> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, ARRAY<INT>>);
error: cannot cast map<string,string> to map<int,array<int>>
> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
error: invalid input syntax for type boolean: o.
-- Casting an OBJECT to a MAP
> SELECT schema_of_variant(parse_json('{"cars": 12, "bicycles": 5 }'));
OBJECT<bicycles: BIGINT, cars: BIGINT>
> SELECT CAST(parse_json('{"cars": 12, "bicycles": 5 }') AS MAP<STRING, INTEGER>);
{bicycles -> 5, cars -> 12}
STRUCT
targetType
Se è uno STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > e sourceExpr
è di tipo:
-
Il risultato è un
NULL
oggetto dell'oggettotargetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
È
sourceExpr
possibile eseguire il cast atargetType
se tutte queste condizioni sono vere:- Il tipo di origine ha lo stesso numero di campi della destinazione
- Per tutti i campi:
sourceFieldTypeN
può essere eseguito il cast atargetFieldTypeN
. - Per tutti i campi values: è possibile effettuare un casting del valore N dal campo di origine a
targetFieldTypeN
e il valore non è nullo se il campo di destinazione N è contrassegnatoNOT NULL
.
sourceFieldName
s, vincoli di origineNOT NULL
e origineCOMMENT
non devono corrispondere atargetType
e vengono ignorati.Azure Databricks genera un errore se il cast non è supportato o se non è possibile eseguire il cast di uno dei campi.
Usare try_cast per trasformare gli errori di overflow o dati non validi in
NULL
.-
Si applicano le regole di tipo per il valore effettivo mantenuto dal
VARIANT
tipo di dati. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Tutte le
sourceFieldName
corrispondenze consourceFieldName
s. Ogni valore del campo di origine disourceFieldType
viene eseguito il cast altargetValueType
corrispondente e mappato al rispettivo valore della mappa.Se un oggetto
targetFieldName
non corrisponde, il valore del campo èNULL
.Se un oggetto
sourceFieldName
non corrisponde, il campo viene ignorato.Azure Databricks genera un errore se i cast non sono supportati o se non è possibile eseguire il cast di uno dei campi values o della chiave values.
Usare try_cast per trasformare gli errori di overflow o dati non validi in
NULL
.
Esempi
> SELECT cast(NULL AS STRUCT<a:INT>);
NULL
> SELECT cast(named_struct('a', 't', 'b', '1900-01-01') AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
{"b":true,"c":1900-01-01}
> SELECT cast(named_struct('a', 't', 'b', NULL::DATE) AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
error: cannot cast struct<a:string,b:date> to struct<b:boolean,c:date>
> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
error: cannot cast struct<a:string,b:string> to struct<b:boolean,c:array<int>>
> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
error: Cannot cast hello to DateType
> SELECT cast(named_struct('a', 't', 'b', '1900-01-01')::VARIANT AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
{"b":true,"c":1900-01-01}
-- Casting an OBJECT to a STRUCT
> SELECT schema_of_variant(parse_json('{"name": "jason", "age": 25 }'));
OBJECT<age: BIGINT, name: STRING>
> SELECT CAST(parse_json('{"name": "jason", "age": 25 }') AS STRUCT<id: BIGINT, name: STRING>);
{"id":null,"name":"jason"}
VARIANT
Se è un valore targetType
VARIANT e sourceExpr
è di tipo :
-
Il risultato è di
NULL
tipoVARIANT
. -
Il risultato è un
VARIANT
oggetto che rappresenta il valore numerico. La precisione deiDECIMAL
tipi deve essere <= 38.Viene eseguito il mapping di tutti i numeri integrali a
BIGINT
.Tutte le
DECIMAL
values vengono mappate alla precisione e alla scala più strette. -
Il risultato è un
VARIANT
oggetto che rappresenta ilSTRING
valore . -
Il risultato è un
VARIANT
oggetto che rappresenta ilDATE
valore . -
Il risultato è un
VARIANT
oggetto che rappresenta ilTIMESTAMP
valore . -
Il risultato è un
VARIANT
oggetto che rappresenta ilTIMESTAMP NTZ
valore . -
Il risultato è un
VARIANT
oggetto che rappresenta ilBOOLEAN
valore . -
Il risultato è un
VARIANT
oggetto che rappresenta ilBINARY
valore . -
Se il cast da
sourceElementType
aVARIANT
è supportato, il risultato èVARIANT
, che rappresentaARRAY<sourceElementType>
.Azure Databricks genera un errore se il cast non è supportato.
Usare try_cast per trasformare gli errori di overflow o dati non validi in
NULL
.
Esempi
> SELECT cast(NULL AS VARIANT);
NULL
> SELECT cast(5.1000 AS VARIANT);
5.1
> SELECT schema_of_variant(cast(5 AS VARIANT));
BIGINT