Condividi tramite


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

  • VOID

    Il risultato è un NULL oggetto 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.

  • CORDA

    sourceExpr viene letto come valore letterale dell'oggetto targetType.

    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.

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

  • BOOLEANO

    Se sourceExpr è:

    • true: il risultato è 1.
    • false: il risultato è 0.
    • NULL: il risultato è NULL.
  • VARIANTE

    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 :

  • VOID

    Il risultato è una NULL stringa.

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

    Il risultato del true valore booleano è il STRING valore letterale true. Si false tratta del valore letterale falseSTRING. 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.

  • ARRAY

    Il risultato è un elenco di elementi cast, delimitato da virgole list e racchiuso 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 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 ->. Un NULL valore della mappa viene convertito in un valore letterale null.

    Azure Databricks non mette tra virgolette né contrassegna altrimenti le singole chiavi o values, i quali possono contenere parentesi graffe, virgole o ->.

  • STRUCT

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

    Azure Databricks non racchiude tra virgolette né contrassegna in altro modo i singoli campi values, che possono contenere parentesi graffe o virgole.

  • VARIANTE

    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 :

  • VOID

    Il risultato è un oggetto NULLDATE.

  • CORDA

    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.

  • VARIANTE

    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 :

  • VOID

    Il risultato è un oggetto NULLDATE.

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

  • CORDA

    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 è l'ora sourceExprDATE00:00:00.

  • TIMESTAMP_NTZ

Il risultato è un valore timestamp con gli stessi campi year/month/day/hour/minute/second di timestamp_ntz sourceExpr.

  • VARIANTE

    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 :

  • VOID

    Il risultato è un oggetto NULLDATE.

  • CORDA

    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.

  • VARIANTE

    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 :

  • VOID

    Il risultato è un NULL intervallo di anno-mese.

  • 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'annomonthIntervalQualifier targetType.

  • CORDA

    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

  • VOID

    Il risultato è un NULL intervallo di tempo di giorno.

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

  • CORDA

    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 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'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 è di NULL tipo BOOLEAN.

  • numeric

    Se sourceExpr è:

    • 0: il risultato è false.

      In caso contrario, il risultato è true.

  • CORDA

    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.

  • VARIANTE

    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:

  • VOID

    Il risultato è di NULL tipo BINARY.

  • CORDA

    Il risultato è la codifica UTF-8 dell'oggetto surceExpr.

  • VARIANTE

    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:

  • VOID

    Il risultato è un NULL oggetto 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.

  • VARIANTE

    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:

  • VOID

    Il risultato è un NULL oggetto dell'oggetto targetType.

  • MAP <sourceKeyType, sourceValueType >

    Se sono supportati i cast da sourceKeyType a targetKeyType e sourceValueType a targetValueType, il risultato è un MAP<targetKeyType, targetValueType> con tutte le chiavi convertite a targetKeyType e tutti i values convertiti a targetValueType.

    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.

  • VARIANTE

    Si applicano le regole di tipo per il valore effettivo mantenuto dal VARIANT tipo di dati.

  • OBJECT < [sourceFieldName : sourceFieldType [, ...]] >

    Ogni sourceFieldName tipo STRING viene sottoposto a cast e targetKeyType mappato a una chiave della mappa. Viene eseguito il cast sourceFieldType di ogni valore del campo di targetValueType 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:

  • VOID

    Il risultato è un NULL oggetto dell'oggetto targetType.

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

    È sourceExpr possibile eseguire il cast a targetType 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 a targetFieldTypeN.
    • 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 è contrassegnato 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 uno dei campi.

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

  • VARIANTE

    Si applicano le regole di tipo per il valore effettivo mantenuto dal VARIANT tipo di dati.

  • OBJECT < [sourceFieldName : sourceFieldType [, ...]] >

    Tutte le sourceFieldNamecorrispondenze con sourceFieldNames. Ogni valore del campo di origine di sourceFieldType viene eseguito il cast al targetValueType 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 targetTypeVARIANT e sourceExpr è di tipo :

  • VOID

    Il risultato è di NULL tipo VARIANT.

  • numeric

    Il risultato è un VARIANToggetto che rappresenta il valore numerico. La precisione dei DECIMAL tipi deve essere <= 38.

    Viene eseguito il mapping di tutti i numeri integrali a BIGINT.

    Tutte le DECIMALvalues vengono mappate alla precisione e alla scala più strette.

  • CORDA

    Il risultato è un VARIANToggetto che rappresenta il STRING valore .

  • DATE

    Il risultato è un VARIANToggetto che rappresenta il DATE valore .

  • TIMESTAMP

    Il risultato è un VARIANToggetto che rappresenta il TIMESTAMP valore .

  • TIMESTAMP_NTZ

    Il risultato è un VARIANToggetto che rappresenta il TIMESTAMP NTZ valore .

  • BOOLEANO

    Il risultato è un VARIANToggetto che rappresenta il BOOLEAN valore .

  • BINARIO

    Il risultato è un VARIANToggetto che rappresenta il BINARY valore .

  • ARRAY < sourceElementType >

    Se il cast da sourceElementType a VARIANT è supportato, il risultato è VARIANT, che rappresenta ARRAY<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