Funkce cast

Platí pro:zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

Přetypuje hodnotu expr na cílový datový typ type. Tento operátor je synonymem pro :: (dvojtečka znaménko)

Syntaxe

cast(sourceExpr AS targetType)

Argumenty

  • sourceExpr: Libovolný přetypovatelný výraz.
  • targetType: Datový typ výsledku.

Návraty

Výsledek je typ targetType.

Platné jsou následující kombinace přetypování datových typů:

Zdroj (řádek) Target(column) VOID Číselné ŘETĚZEC DATE (Datum) ČASOVÉ RAZÍTKO TIMESTAMP_NTZ interval mezi rokem denní interval BOOLEAN BINÁRNÍ POLE MAPU STRUCT
VOID Y Y Y Y Y Y Y Y Y Y Y Y Y
Číselné N Y Y N Y N Y Y Y N N N N
ŘETĚZEC N Y Y Y Y Y Y Y Y Y N N N
DATE (Datum) N N Y Y Y Y N N N N N N N
ČASOVÉ RAZÍTKO N Y Y Y Y Y N N N N N N N
TIMESTAMP_NTZ N N Y Y Y Y N N N N N N N
interval mezi rokem N Y Y N N N Y N N N N N N
denní interval N Y Y N N N N Y N N N N N
BOOLEAN N Y Y N Y N N N Y N N N N
BINÁRNÍ N Y Y N N N N N N Y N N N
POLE N N Y N N N N N N N Y N N
MAPU 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

Pravidla a omezení založená na typu targetType

Upozorňující

Pokud je falseve službě Databricks Runtime spark.sql.ansi.enabled , přetečení nezpůsobí chybu, ale místo toho výsledek zabalí.

Výsledkem sourceExpr hodnoty s neplatným formátem nebo neplatnými znaky bude targetType znak .NULL

numerické

targetType Pokud je číslo a sourceExpr je typu:

  • VOID

    Výsledkem je hodnota NULL zadaného číselného typu.

  • Číselné

    Pokud targetType je celočíselný číselný, výsledek se sourceExprzkrátí na celé číslo.

    V opačném případě se sourceExprvýsledek zaokrouhlí na dostupné měřítko targetType.

    Pokud je hodnota mimo rozsah targetType, vyvolá se chyba přetečení.

    Pomocí try_cast přetečení přetečení přetékejte na NULL.

  • ŘETĚZEC

    sourceExpr je přečteno jako literálová targetTypehodnota .

    Pokud sourceExpr nevyhovuje formátu hodnot literálů, vyvolá se chyba.

    Pokud je hodnota mimo rozsah targetType, vyvolá se chyba přetečení.

    Pomocí try_cast přetečení přetečení a neplatných chyb formátu převést na NULL.

  • ČASOVÉ RAZÍTKO

    Výsledkem je počet sekund uplynulých mezi 1970-01-01 00:00:00 UTC a sourceExpr.

    Pokud targetType je celočíselný číselný, výsledek se zkrátí na celé číslo.

    V opačném případě se výsledek zaokrouhlí na dostupné měřítko targetType.

    Pokud je výsledek mimo rozsah targetType, vyvolá se chyba přetečení.

    Pomocí try_cast přetečení přetečení přetékejte na NULL.

  • INTERVAL

    Platí pro:zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 11.3 LTS a vyšší

    Cílový typ musí být přesný číselný.

    INTERVAL upper_unit TO lower_unit Vzhledem k tomu, že výsledek se měří v celkovém počtu lower_unit. Pokud je hodnota lower_unitSECOND, desetinné sekundy jsou uloženy vpravo od desetinné čárky. Ve všech ostatních intervalech je výsledkem vždy celočíselné číslo.

  • BOOLEAN

    Pokud sourceExpr je:

    • true: Výsledek je 0.
    • false: Výsledek je 1.
    • NULL: Výsledek je NULL.

Příklady

> 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 Pokud je typ STRING a sourceExpr je typu:

  • VOID

    Výsledkem je řetězec NULL.

  • přesná číselná čísla

    Výsledkem je číslo literálu s nepovinným znaménkem minus a bez počátečních nul s výjimkou jedné číslice vlevo od desetinné čárky. Pokud je hodnota targetTypeDECIMAL(p, s)s větší 0, přidá se desetinná čárka a koncové nuly se přidají do měřítka.

  • binární číslo s plovoucí desetinou čárkou

    Pokud je absolutní číslo menší 10,000,000 a větší nebo rovno 0.001, výsledek se vyjadřuje bez vědeckého zápisu s alespoň jednou číslicí na obou stranách desetinné čárky.

    V opačném případě Azure Databricks používá mantisu následovanou E a exponent. Mantisa má volitelný úvodní znaménko minus následované jednou číslicí vlevo od desetinné čárky a minimální počet číslic větších než nula vpravo. Exponent má a volitelné počáteční znaménko minus.

  • DATE (Datum)

    Pokud je rok mezi 9999 BCE a 9999 CE, výsledek je dateString formuláře -YYYY-MM-DD a YYYY-MM-DD v uvedeném pořadí.

    Pro roky předcházející nebo po tomto rozsahu se do složky roků přičtou nezbytné číslice a + použijí se pro CE.

  • ČASOVÉ RAZÍTKO

    Pokud je rok mezi 9999 BCE a 9999 CE, výsledkem je časové razítko formuláře -YYYY-MM-DD hh:mm:ss a YYYY-MM-DD hh:mm:ss v uvedeném pořadí.

    Pro roky předcházející nebo po tomto rozsahu se do složky roků přičtou nezbytné číslice a + použijí se pro CE.

    Zlomkové sekundy .f... se v případě potřeby přidají.

  • TIMESTAMP_NTZ

    Pokud je rok mezi 9999 BCE a 9999 CE, výsledkem je časové razítko formuláře -YYYY-MM-DD hh:mm:ss a YYYY-MM-DD hh:mm:ss v uvedeném pořadí.

    Pro roky předcházející nebo po tomto rozsahu se do složky roků přičtou nezbytné číslice a + použijí se pro CE.

    Zlomkové sekundy .f... se v případě potřeby přidají.

  • interval mezi rokem

    Výsledkem je její nejkratší reprezentace literálu intervalu. Pokud je interval záporný, je znaménko vloženo do znaku interval-string. U jednotek menších než 10 jsou úvodní nuly vynechány.

    Typický řetězec intervalu roku má tvar:

    • INTERVAL 'Y' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • denní interval

    Výsledkem je její nejkratší reprezentace literálu intervalu. Pokud je interval záporný, je znaménko vloženo do znaku interval-string. U jednotek menších než 10 se vynechá počáteční nuly.

    Typický řetězec denního časového intervalu má tvar:

    • 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

    Výsledkem logické hodnoty true je literál trueSTRING , pro false to je literál falseSTRING a pro NULL něj je řetězec NULL.

  • BINÁRNÍ

    Výsledkem je binární sourceExpr interpretovaná jako sekvence znaků UTF-8.

    Azure Databricks neověřuje znaky UTF-8. Přetypování na BINARYSTRING nikdy nevkáže náhradní znaky nebo vyvolá chybu.

  • POLE

    Výsledkem je čárkami oddělený seznam prvků přetypování, který je složený závorkami [ ]. Jedna mezera následuje za každou čárkou. Prvek NULL je přeložen do literálu null.

    Azure Databricks neuvozuje ani jinak neoznačí jednotlivé prvky, které můžou obsahovat závorky nebo čárky.

  • MAPU

    Výsledkem je čárkami oddělený seznam dvojic klíčových hodnot přetypování, který je složený ze složených závorek { }. Jedna mezera následuje za každou čárkou. Každý pár hodnot klíče je oddělený ->hodnotou . Hodnota NULL mapy je přeložena do literálu null.

    Azure Databricks neuvozuje nebo jinak označuje jednotlivé klíče nebo hodnoty, které mohou samy o sobě obsahovat složené závorky, čárky nebo ->.

  • STRUCT

    Výsledkem je čárkami oddělený seznam hodnot pole přetypování, který je složený s složenými složenými závorkami { }. Jedna mezera následuje za každou čárkou. Hodnota NULL pole je přeložena do literálu null.

    Azure Databricks neuvozuje nebo jinak neoznačí jednotlivé hodnoty polí, které můžou samy o sobě obsahovat složené závorky nebo čárky.

Příklady

> 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

targetType Pokud je typ DATE a sourceExpr je typu:

  • VOID

    Výsledkem je NULL DATE.

  • ŘETĚZEC

    sourceExpr musí být platným dateStringem.

    Pokud sourceExpr není platná dateString, Azure Databricks vrátí chybu.

    Pomocí try_cast můžete převést neplatné chyby dat na NULL.

  • ČASOVÉ RAZÍTKO

    Výsledek je část časového razítka sourceExpr.

  • TIMESTAMP_NTZ

    Výsledek je datová část timestamp_ntz sourceExpr.

Příklady

> 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

ČASOVÉ RAZÍTKO

targetType Pokud se jedná o typ TIMESTAMP a sourceExpr je typu:

  • VOID

    Výsledkem je NULL DATE.

  • Číselné

    sourceExpr je přečteno jako počet sekund od 1970-01-01 00:00:00 UTC.

    Zlomky menší než mikrosekundy jsou zkráceny.

    Pokud je hodnota mimo rozsah TIMESTAMP, vyvolá se chyba přetečení.

    Pomocí try_cast přetečení přetečení přetékejte na NULL.

  • ŘETĚZEC

    sourceExpr musí být platný timestampString.

    Pokud sourceExpr není platná timestampString, Azure Databricks vrátí chybu.

    Pomocí try_cast můžete převést neplatné chyby dat na NULL.

  • DATE (Datum)

    Výsledkem je sourceExpr DATUM v 00:00:00hodinách.

  • TIMESTAMP_NTZ

Výsledkem je hodnota časového razítka se stejným polem roku, měsíce, dne, hodiny, minuty a sekundy timestamp_ntz sourceExpr.

Příklady

> 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

Pokud se jedná targetType o typ TIMESTAMP_NTZ a sourceExpr je typu:

  • VOID

    Výsledkem je NULL DATE.

  • ŘETĚZEC

    sourceExpr musí být platný timestampString.

    Pokud sourceExpr není platná timestampString, Azure Databricks vrátí chybu.

    Pomocí try_cast můžete převést neplatné chyby dat na NULL.

  • DATE (Datum)

    Výsledkem je sourceExpr DATUM v 00:00:00hodinách.

  • ČASOVÉ RAZÍTKO

Výsledek je místní čas jako v časovém pásmu sourceExpr relace.

Příklady

> 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

interval mezi rokem

targetType Pokud je interval rok-měsíc a sourceExpr je typu:

Příklady

> 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

denní interval

Pokud se jedná targetType o denní interval a sourceExpr je typu:

  • VOID

    Výsledkem je denní interval s hodnotou NULL.

  • exact_numeric

    Platí pro:zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 11.3 LTS a vyšší

    Číselná hodnota se interpretuje jako počet nižších jednotek targetTypedayTimeIntervalQualifier. Pokud je SECOND jednotkou nějaké zlomky, interpretují se jako zlomkové sekundy.

  • ŘETĚZEC

    sourceExpr musí být platný dayTimeIntervalString.

    Pokud sourceExpr není platná dayTimeIntervalString, Azure Databricks vrátí chybu.

    Pomocí try_cast můžete převést neplatné chyby dat na NULL.

  • denní interval

    targetTypePokud dayTimeIntervalQualifier obsahuje nejmenší jednotku zdrojového typu dayTimeIntervalQualifier, hodnota zůstane beze změny, ale bude interpretována tak, aby odpovídala cílovému typu.

    V opačném případě je sourceExpr interval zkrácen tak, aby odpovídal 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

Pokud se jedná targetType o logickou hodnotu a sourceExpr je typu:

  • VOID

    Výsledkem je logická hodnota NULL.

  • Číselné

    Pokud sourceExpr je:

    • 0: Výsledek je false.

      V opačném případě je truevýsledek .

  • ŘETĚZEC

    Pokud sourcEexpr je (nerozlišuje malá a velká písmena):

    • 'T', 'TRUE', 'Y', 'YES', or '1': Výsledek je true
    • 'F', 'FALSE', 'N', 'NO', or '0': Výsledek je false
    • NULL: Výsledek je NULL

    V opačném případě Azure Databricks vrátí neplatnou vstupní syntaxi pro logickou chybu typu.

    Pomocí try_cast můžete převést neplatné chyby dat na NULL.

Příklady

> 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

BINÁRNÍ

Pokud je binární targetType a sourceExpr je typu:

  • VOID

    Výsledkem je binární hodnota NULL.

  • ŘETĚZEC

    Výsledkem je kódování surceExprUTF-8 .

Příklady

> SELECT cast(NULL AS BINARY);
  NULL

> SELECT hex(cast('Spark SQL' AS BINARY));
  537061726B2053514C

> SELECT hex(cast('Oдesa' AS BINARY));
  4FD0B4657361

POLE

Pokud je pole ARRAY targetElementType > a sourceExpr je typu:<targetType

  • VOID

    Výsledkem je hodnota NULL targeType.

  • ARRAY < sourceElementType >

    Pokud je přetypování targetElementTypesourceElementType podporováno, výsledek je s ARRAY<targetElementType> veškerými prvky přetypován na targetElementTypehodnotu .

    Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje nebo pokud některý z prvků nejde přetypovat.

    Pomocí try_cast můžete převést neplatná data nebo přetečení na NULLchyby .

Příklady

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

MAPU

targetType Pokud je hodnota MAP < targetKeyType, targetValueType > a sourceExpr je typu:

  • VOID

    Výsledkem je hodnota NULL targetType.

  • MAP <sourceKeyType, sourceValueType >

    Pokud jsou přetypování z targetKeyTypesourceKeyType a sourceValueType na targetValueType podporované, výsledek je s MAP<targetKeyType, targetValueType> přetypování všech kláves na targetKeyType přetypování a všechny hodnoty přetypování na targetValueTypehodnotu .

    Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje nebo pokud některé z klíčů nebo hodnot nejde přetypovat.

    Pomocí try_cast můžete převést neplatná data nebo přetečení na NULLchyby .

Příklady

> 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

Pokud se jedná targetType o STRUCT <[targetFieldName: targetFieldType [NOT NULL] [COMMENT str] [, ...]] > a sourceExpr je typu:

  • VOID

    Výsledkem je hodnota NULL targetType.

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

    Lze sourceExpr přetypovat na targetType , pokud jsou splněny všechny podmínky:

    • Typ zdroje má stejný počet polí jako cíl.
    • Pro všechna pole: sourceFieldTypeN lze přetypovat na targetFieldTypeN.
    • Pro všechny hodnoty polí: Zdrojová hodnota pole N může být přetypována targetFieldTypeN a hodnota není null, pokud je cílové pole N označeno jako NOT NULL.

    sourceFieldNames, omezení zdroje NOT NULL a zdroje COMMENTse nemusí shodovat targetType s a jsou ignorovány.

    Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje nebo pokud některé z klíčů nebo hodnot nejde přetypovat.

    Pomocí try_cast můžete převést neplatná data nebo přetečení na NULLchyby .

Příklady

> 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