Funzione cast

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Esegue il cast del valore expr al tipo di dati di typedestinazione . 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 :

  • VOID

    Il risultato è null del tipo numerico specificato.

  • numeric

    Se targetType è un valore numerico integrale, il risultato viene sourceExprtroncato a un numero intero.

    In caso contrario, il risultato viene sourceExprarrotondato a una adatta alla scala disponibile di targetType.

    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.

  • STRINGA

    sourceExpr viene letto come valore letterale dell'oggetto targetType.

    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.

  • TIMESTAMP

    Il risultato è il numero di secondi trascorsi tra 1970-01-01 00:00:00 UTC e sourceExpr.

    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.

  • INTERVAL

    Si applica a:segno di spunta sì Databricks SQL segno di spunta sì 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 di lower_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.

  • BOOLEAN

    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 :

  • VOID

    Il risultato è una stringa NULL.

  • numerico esatto

    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) con s maggiore 0, viene aggiunto un separatore decimale e gli zeri finali vengono aggiunti fino alla scala.

  • binario a virgola mobile

    Se il numero assoluto è minore 10,000,000 di e maggiore o uguale 0.001a , 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.

  • DATE

    Se l'anno è compreso tra il 9999 e il 9999 CE, il risultato è una dataString della forma -YYYY-MM-DD e YYYY-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.

  • TIMESTAMP

    Se l'anno è compreso tra il 9999 e il 9999 CE, il risultato è un timestampString della forma -YYYY-MM-DD hh:mm:ss e YYYY-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.

  • TIMESTAMP_NTZ

    Se l'anno è compreso tra il 9999 e il 9999 CE, il risultato è un timestampString della forma -YYYY-MM-DD hh:mm:ss e YYYY-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.

  • intervallo anno-mese

    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
  • BOOLEAN

    Il risultato del true valore booleano è il valore trueletterale STRING, perché false è il valore letterale falseSTRING e per NULL la stringa NULL.

  • BINARIO

    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 a STRING non inserisce mai caratteri di sostituzione o genera un errore.

  • MATRICE

    Il risultato è un elenco delimitato da virgole di elementi cast, racchiusi tra parentesi quadre [ ]. Uno spazio segue ogni virgola. Un NULL elemento viene convertito in un valore letterale null.

    Azure Databricks non virgolette o contrassegna in altro modo singoli elementi, che possono contenere parentesi quadre o virgole.

  • MAPPA

    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 ->. Un NULL valore della mappa viene convertito in un valore letterale null.

    Azure Databricks non virgolette o contrassegna in altro modo singole chiavi o valori, che possono contenere parentesi graffe, virgole o ->.

  • STRUCT

    Il risultato è un elenco delimitato da virgole di valori di campo cast, racchiuso tra parentesi graffe { }. Uno spazio segue ogni virgola. Un NULL valore di campo viene convertito in un valore letterale null.

    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 :

  • VOID

    Il risultato è null DATE.

  • STRINGA

    sourceExprdeve essere un valore dateString valido.

    Se sourceExpr non è un valore valido dateString, Azure Databricks restituisce un errore.

    Usare try_cast per trasformare gli errori di dati non validi in NULL.

  • TIMESTAMP

    Il risultato è la parte data del timestamp sourceExpr.

  • TIMESTAMP_NTZ

    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 :

  • VOID

    Il risultato è null DATE.

  • numeric

    sourceExpr viene letto come numero di secondi da 1970-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.

  • STRINGA

    sourceExprdeve essere un timestampString valido.

    Se sourceExpr non è un valore valido timestampString, Azure Databricks restituisce un errore.

    Usare try_cast per trasformare gli errori di dati non validi in NULL.

  • DATE

    Il risultato è date sourceExpr alle 00:00:00ore.

  • TIMESTAMP_NTZ

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 :

  • VOID

    Il risultato è null DATE.

  • STRINGA

    sourceExprdeve essere un timestampString valido.

    Se sourceExpr non è un valore valido timestampString, Azure Databricks restituisce un errore.

    Usare try_cast per trasformare gli errori di dati non validi in NULL.

  • DATE

    Il risultato è date sourceExpr alle 00:00:00ore.

  • TIMESTAMP

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 :

  • VOID

    Il risultato è un intervallo di anno-mese NULL.

  • integral_numeric

    Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 11.3 LTS e versioni successive

    Il valore numerico viene interpretato come numero di unità inferiori dell'annomonthIntervalQualifiertargetType.

  • STRINGA

    sourceExprdeve essere un anno validoMonthIntervalString.

    Se sourceExpr non è un valore valido yearMonthIntervalString, Azure Databricks restituisce un errore.

    Usare try_cast per trasformare gli errori di dati non validi in NULL.

  • intervallo anno-mese

    Se yearMonthIntervalQualifier targetTypeinclude MONTH 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:

  • VOID

    Il risultato è un intervallo di tempo di giorno NULL.

  • exact_numeric

    Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 11.3 LTS e versioni successive

    Il valore numerico viene interpretato come numero di unità inferiori di targetTypedayTimeIntervalQualifier. Se l'unità è SECOND qualsiasi frazione viene interpretata come secondi frazionari.

  • STRINGA

    sourceExprdeve essere un dayTimeIntervalString valido.

    Se sourceExpr non è un valore valido dayTimeIntervalString, 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'oggetto targetType.

> 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:

  • VOID

    Il risultato è un valore booleano NULL.

  • numeric

    Se sourceExpr è:

    • 0: il risultato è false.

      In caso contrario, il risultato è true.

  • STRINGA

    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:

  • VOID

    Il risultato è un file binario NULL.

  • STRINGA

    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:

  • VOID

    Il risultato è null dell'oggetto targeType.

  • ARRAY < sourceElementType >

    Se il cast da sourceElementType a targetElementType è supportato, il risultato è un ARRAY<targetElementType> oggetto con tutti gli elementi di cui è stato eseguito il targetElementTypecast 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:

  • VOID

    Il risultato è null dell'oggetto targetType.

  • MAP <sourceKeyType, sourceValueType >

    Se i cast da sourceKeyType e sourceValueTypetargetKeyType a targetValueType sono supportati, il risultato è un MAP<targetKeyType, targetValueType> oggetto con tutte le chiavi di cui viene eseguito il targetKeyType cast a e tutti i valori di cui viene eseguito il targetValueTypecast 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:

  • VOID

    Il risultato è null dell'oggetto targetType.

  • STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >

    Può sourceExpr essere eseguito il cast a targetType 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 a targetFieldTypeN.
    • 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 come NOT NULL.

    sourceFieldNames, vincoli di origine NOT NULL e origine COMMENTnon devono corrispondere a targetType 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