Funzione cast
Si applica a: Databricks SQL Databricks Runtime
Esegue il cast del valore expr
al tipo di dati di type
destinazione . 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 | STRINGA | DATE | TIMESTAMP | TIMESTAMP_NTZ | intervallo anno-mese | intervallo di tempo del giorno | BOOLEAN | BINARIO | MATRICE | MAPPA | STRUCT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | S | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | S |
numeric | N | S | Y | N | Y | N | S | Y | Y | N | N | N | N |
STRINGA | N | S | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N |
DATE | N | N | S | Y | Y | Y | N | N | N | N | N | N | N |
TIMESTAMP | N | S | Y | Y | Y | Y | N | N | N | N | N | N | N |
TIMESTAMP_NTZ | N | N | S | Y | Y | Y | N | N | N | N | N | N | N |
intervallo anno-mese | N | S | Y | N | N | N | Y | N | N | N | N | N | N |
intervallo di tempo del giorno | N | S | Y | N | N | N | N | Y | N | N | N | N | N |
BOOLEAN | N | S | Y | N | Y | N | N | N | Y | N | N | N | N |
BINARIO | N | S | Y | N | N | N | N | N | N | Y | N | N | N |
MATRICE | N | N | Y | N | N | N | N | N | N | N | Y | N | N |
MAPPA | N | N | Y | N | N | N | N | N | N | N | N | Y | N |
STRUCT | N | N | Y | N | N | N | N | N | N | N | N | N | Y |
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 è null 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 per i valori letterali, 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 è 0.false
: il risultato è 1.NULL
: il risultato èNULL
.
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
STRING
targetType
Se è un tipo STRING e sourceExpr
è di tipo :
-
Il risultato è una stringa NULL.
-
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 è il valoretrue
letterale STRING, perchéfalse
è il valore letteralefalse
STRING e 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 delimitato da virgole di elementi cast, racchiusi 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 elenco 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 virgolette o contrassegna in altro modo singole chiavi o valori, che possono contenere parentesi graffe, virgole o
->
. -
Il risultato è un elenco delimitato da virgole di valori di campo cast, racchiuso tra parentesi graffe
{ }
. Uno spazio segue ogni virgola. UnNULL
valore di campo viene convertito in un valore letteralenull
.Azure Databricks non virgolette o contrassegna in altro modo singoli valori di campo, che possono contenere parentesi graffe o virgole.
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);
{}
DATE
Se è targetType
un tipo DATE e sourceExpr
è di tipo :
-
Il risultato è 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
.
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
TIMESTAMP
Se è targetType
un tipo TIMESTAMP e sourceExpr
è di tipo :
-
Il risultato è 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 è date
sourceExpr
alle00:00:00
ore.
Il risultato è un valore timestamp con gli stessi campi year/month/day/hour/minute/second di timestamp_ntz sourceExpr
.
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
TIMESTAMP_NTZ
targetType
Se è un tipo di TIMESTAMP_NTZ e sourceExpr
è di tipo :
-
Il risultato è 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.
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
intervallo anno-mese
Se è targetType
un intervallo di anno e sourceExpr
è di tipo :
-
Il risultato è un intervallo di anno-mese NULL.
-
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
Se è targetType
un intervallo di tempo di giorno e sourceExpr
è di tipo:
-
Il risultato è un intervallo di tempo di giorno NULL.
-
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 origine dayTimeIntervalQualifier, il valore rimane invariato, ma viene reinterpretato in modo che corrisponda al tipo di destinazione.
targetType
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 è un valore booleano NULL.
-
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
.
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
BINARY
targetType
Se è binary e sourceExpr
è di tipo:
-
Il risultato è un file binario NULL.
-
Il risultato è la codifica UTF-8 dell'oggetto
surceExpr
.
Esempi
> SELECT cast(NULL AS BINARY);
NULL
> SELECT hex(cast('Spark SQL' AS BINARY));
537061726B2053514C
> SELECT hex(cast('Oдesa' AS BINARY));
4FD0B4657361
ARRAY
Se è targetType
un < array targetElementType > e sourceExpr
è di tipo:
-
Il risultato è null dell'oggetto
targeType
. -
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
.
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.
MAP
targetType
Se è un targetKeyType MAP<, targetValueType > e sourceExpr
è di tipo:
-
Il risultato è null dell'oggetto
targetType
. MAP <sourceKeyType, sourceValueType >
Se i cast da
sourceKeyType
esourceValueType
targetKeyType
atargetValueType
sono supportati, il risultato è unMAP<targetKeyType, targetValueType>
oggetto con tutte le chiavi di cui viene eseguito iltargetKeyType
cast a e tutti i valori di cui viene eseguito iltargetValueType
cast a .Azure Databricks genera un errore se il cast non è supportato o se non è possibile eseguire il cast di una delle chiavi o dei valori.
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.
STRUCT
targetType
Se è uno STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > e sourceExpr
è di tipo:
-
Il risultato è null dell'oggetto
targetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
Può
sourceExpr
essere eseguito il cast atargetType
se tutte le 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 valori di campo: è possibile eseguire il cast
targetFieldTypeN
del valore N del campo di origine e il valore non è Null se il campo di destinazione N è contrassegnato comeNOT 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 una delle chiavi o dei valori.
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') 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