Funktionen cast

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Omvandlar värdet expr till måldatatypen type. Den här operatorn är synonym för operatorn :: (kolontecken)

Syntax

cast(sourceExpr AS targetType)

Argument

  • sourceExpr: Valfritt kastreringsbart uttryck.
  • targetType: Resultatets datatyp.

Returer

Resultatet är typ targetType.

Följande kombinationer av datatypsgjutning är giltiga:

Källa (rad) Mål(kolumn) VOID Numeriska STRÄNG DATE TIMESTAMP TIMESTAMP_NTZ årsmånadsintervall dagtidsintervall BOOLEAN BINÄRA ARRAY KARTA STRUCT
VOID Y Y Y Y Y Y Y Y Y Y Y Y Y
Numeriska N Y Y N Y N Y Y Y N N N N
STRÄNG N Y Y Y Y Y Y Y Y Y N N N
DATE N N Y Y Y Y N N N N N N N
TIMESTAMP 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
årsmånadsintervall N Y Y N N N Y N N N N N N
dagtidsintervall 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ÄRA N Y Y N N N N N N Y N N N
ARRAY N N Y N N N N N N N Y N N
KARTA 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

Regler och begränsningar baserade på targetType

Varning

Om spark.sql.ansi.enabled är falsei Databricks Runtime orsakar ett spill inte ett fel utan "omsluter" resultatet.

Ett sourceExpr värde med ett ogiltigt format eller ogiltiga tecken för targetType resulterar i en NULL.

numeric

targetType Om är ett numeriskt och sourceExpr är av typen:

  • VOID

    Resultatet är en NULL av den angivna numeriska typen.

  • Numeriska

    Om targetType är ett heltalsnumeriskt trunkeras resultatet sourceExprtill ett heltal.

    Annars avrundas resultatet sourceExprså att det passar den tillgängliga skalan för targetType.

    Om värdet ligger utanför intervallet targetTypeför utlöses ett spillfel.

    Använd try_cast för att omvandla spillfel till NULL.

  • STRÄNG

    sourceExpr läss som ett literalvärde för targetType.

    Om sourceExpr inte överensstämmer med formatet för literalvärden utlöses ett fel.

    Om värdet ligger utanför intervallet för targetTypegenereras ett spillfel.

    Använd try_cast för att omvandla spill och ogiltiga formatfel till NULL.

  • TIMESTAMP

    Resultatet är antalet sekunder som förflutit mellan 1970-01-01 00:00:00 UTC och sourceExpr.

    Om targetType är ett heltalsnumeriskt trunkeras resultatet till ett heltal.

    Annars avrundas resultatet så att det passar den tillgängliga skalan för targetType.

    Om resultatet ligger utanför intervallet targetTypeför genereras ett spillfel.

    Använd try_cast för att omvandla spillfel till NULL.

  • INTERVALL

    Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 11.3 LTS och senare

    Måltypen måste vara exakt numerisk.

    Givet ett INTERVAL upper_unit TO lower_unit resultat mäts i det totala antalet lower_unit. lower_unit Om är SECONDlagras bråksekunder till höger om decimaltecknet. För alla andra intervall är resultatet alltid ett heltal.

  • BOOLEAN

    Om sourceExpr är:

    • true: Resultatet är 0.
    • false: Resultatet är 1.
    • NULL: Resultatet är NULL.

Exempel

> 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

STRÄNG

targetType Om är en STRING-typ och sourceExpr är av typen:

  • VOID

    Resultatet är en NULL-sträng.

  • exakta numeriska

    Resultatet är det literala talet med ett valfritt minustecken och inga inledande nollor förutom den ensiffriga siffran till vänster om decimaltecknet. targetType Om är DECIMAL(p, s) med s större 0 läggs en decimalpunkt till och avslutande nollor läggs till för skalning.

  • flyttalsbinär

    Om det absoluta talet är mindre än och 10,000,000 större eller lika 0.001med uttrycks resultatet utan vetenskaplig notation med minst en siffra på vardera sidan av decimaltecknet.

    Annars använder Azure Databricks en mantissa följt av E och en exponent. Mantissa har ett valfritt inledande minustecken följt av en siffra till vänster om decimaltecknet och det minsta antalet siffror som är större än noll till höger. Exponenten har och valfritt inledande minustecken.

  • DATE

    Om året är mellan 9999 f.Kr. och 9999 e.Kr. blir resultatet en dateString av formuläret -YYYY-MM-DD respektive YYYY-MM-DD .

    I flera år före eller efter det här intervallet läggs det nödvändiga antalet siffror till i årskomponenten och + används för CE.

  • TIMESTAMP

    Om året är mellan 9999 f.Kr. och 9999 e.Kr. är resultatet en tidsstämpelSträng av formuläret -YYYY-MM-DD hh:mm:ss respektive YYYY-MM-DD hh:mm:ss .

    I flera år före eller efter det här intervallet läggs det nödvändiga antalet siffror till i årskomponenten och + används för CE.

    Bråk sekunder .f... läggs till om det behövs.

  • TIMESTAMP_NTZ

    Om året är mellan 9999 f.Kr. och 9999 e.Kr. är resultatet en tidsstämpelSträng av formuläret -YYYY-MM-DD hh:mm:ss respektive YYYY-MM-DD hh:mm:ss .

    I flera år före eller efter det här intervallet läggs det nödvändiga antalet siffror till i årskomponenten och + används för CE.

    Bråk sekunder .f... läggs till om det behövs.

  • årsmånadsintervall

    Resultatet är den kortaste representationen av intervallliteralen. Om intervallet är negativt bäddas tecknet in i interval-string. För enheter som är mindre än 10 utelämnas inledande nollor.

    En typisk årsmånadsintervallsträng har formuläret:

    • INTERVAL 'Y' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • dagtidsintervall

    Resultatet är den kortaste representationen av intervallliteralen. Om intervallet är negativt bäddas tecknet in i interval-string. För enheter som är mindre än 10 utelämnas inledande nollor.

    En typisk tidsintervallsträng för dagen har formuläret:

    • 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

    Resultatet av det true booleska är strängliteralen true, för false det är strängliteralen false, och för NULL det är null-strängen.

  • BINÄRA

    Ett resultat är binärfilen sourceExpr som tolkas som en UTF-8-teckensekvens.

    Azure Databricks verifierar inte UTF-8-tecknen. En gjuten från BINARY till STRING kommer aldrig att mata in ersättningstecken eller generera ett fel.

  • ARRAY

    Resultatet är en kommaavgränsad lista över gjutna element, som är klammerparenteser [ ]. Ett blanksteg följer varje kommatecken. Ett NULL element översätts till en literal null.

    Azure Databricks citerar inte eller markerar på annat sätt enskilda element, som själva kan innehålla hakparenteser eller kommatecken.

  • KARTA

    Resultatet är en kommaavgränsad lista över nyckelpar med gjuten nyckel, som är klammerparenteser { }. Ett blanksteg följer varje kommatecken. Varje nyckelvärdepar avgränsas med en ->. Ett NULL kartvärde översätts till literal null.

    Azure Databricks citerar inte eller markerar på annat sätt enskilda nycklar eller värden, som i sig kan innehålla klammerparenteser, kommatecken eller ->.

  • STRUCT

    Resultatet är en kommaavgränsad lista över gjutna fältvärden, som är klammerparenteser { }. Ett blanksteg följer varje kommatecken. Ett NULL fältvärde översätts till en literal null.

    Azure Databricks citerar inte eller markerar på annat sätt enskilda fältvärden, som själva kan innehålla klammerparenteser eller kommatecken.

Exempel

> 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);
  {}

DATUM

targetType Om är en DATE-typ och sourceExpr är av typen:

  • VOID

    Resultatet är ett NULL-DATUM.

  • STRÄNG

    sourceExpr måste vara en giltig dateString.

    Om sourceExpr inte är giltigt dateStringreturnerar Azure Databricks ett fel.

    Använd try_cast för att omvandla ogiltiga datafel till NULL.

  • TIMESTAMP

    Resultatet är datumdelen av tidsstämpeln sourceExpr.

  • TIMESTAMP_NTZ

    Resultatet är datumdelen av timestamp_ntz sourceExpr.

Exempel

> 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

targetType Om är en TIMESTAMP-typ och sourceExpr är av typen:

  • VOID

    Resultatet är ett NULL-DATUM.

  • Numeriska

    sourceExpr läss som antalet sekunder sedan 1970-01-01 00:00:00 UTC.

    Bråk som är mindre än mikrosekunder trunkeras.

    Om värdet ligger utanför intervallet TIMESTAMPför genereras ett spillfel.

    Använd try_cast för att omvandla spillfel till NULL.

  • STRÄNG

    sourceExpr måste vara en giltig tidsstämpelSträng.

    Om sourceExpr inte är giltigt timestampStringreturnerar Azure Databricks ett fel.

    Använd try_cast för att omvandla ogiltiga datafel till NULL.

  • DATE

    Resultatet är sourceExpr DATUM vid 00:00:00hrs.

  • TIMESTAMP_NTZ

Resultatet är ett tidsstämpelvärde med samma fält för år/månad/dag/timme/minut/sekund i timestamp_ntz sourceExpr.

Exempel

> 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 Om är en TIMESTAMP_NTZ typ och sourceExpr är av typen:

  • VOID

    Resultatet är ett NULL-DATUM.

  • STRÄNG

    sourceExpr måste vara en giltig tidsstämpelSträng.

    Om sourceExpr inte är giltigt timestampStringreturnerar Azure Databricks ett fel.

    Använd try_cast för att omvandla ogiltiga datafel till NULL.

  • DATE

    Resultatet är sourceExpr DATUM vid 00:00:00hrs.

  • TIMESTAMP

Resultatet är lokal tid som sourceExpr i sessionens tidszon.

Exempel

> 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

årsmånadsintervall

targetType Om är ett årsmånadsintervall och sourceExpr är av typen:

Exempel

> 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

dagtidsintervall

targetType Om är ett dagtidsintervall och sourceExpr är av typen:

  • VOID

    Resultatet är ett null-dagsintervall.

  • exact_numeric

    Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 11.3 LTS och senare

    Det numeriska värdet tolkas som antalet lägre enheter i targetTypedayTimeIntervalQualifier. Om enheten är SECOND bråktal tolkas den som bråksekunder.

  • STRÄNG

    sourceExpr måste vara en giltig dayTimeIntervalString.

    Om sourceExpr inte är giltigt dayTimeIntervalStringreturnerar Azure Databricks ett fel.

    Använd try_cast för att omvandla ogiltiga datafel till NULL.

  • dagtidsintervall

    targetTypeOm dayTimeIntervalQualifier innehåller den minsta enheten av källtypen dayTimeIntervalQualifier förblir värdet oförändrat, men omtolkas för att matcha måltypen.

    Annars sourceExpr trunkeras intervallet så att det targetTypepassar .

> 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 Om är en BOOLEAN och sourceExpr är av typen:

  • VOID

    Resultatet är ett NULL-booleskt värde.

  • Numeriska

    Om sourceExpr är:

  • STRÄNG

    Om sourcEexpr är (skiftlägesokänsligt):

    • 'T', 'TRUE', 'Y', 'YES', or '1': Resultatet är true
    • 'F', 'FALSE', 'N', 'NO', or '0': Resultatet är false
    • NULL: Resultatet är NULL

    Annars returnerar Azure Databricks en ogiltig indatasyntax för typen booleskt fel.

    Använd try_cast för att omvandla ogiltiga datafel till NULL.

Exempel

> 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 Om är binär och sourceExpr är av typen:

  • VOID

    Resultatet är en NULL-binär.

  • STRÄNG

    Resultatet är UTF-8-kodningen för surceExpr.

Exempel

> SELECT cast(NULL AS BINARY);
  NULL

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

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

ARRAY

targetType Om är en ARRAY targetElementType<>och sourceExpr är av typen:

  • VOID

    Resultatet är null för targeType.

  • ARRAY < sourceElementType >

    Om gjutningen från sourceElementType till targetElementType stöds är resultatet ett ARRAY<targetElementType> med alla element gjutna targetElementTypetill .

    Azure Databricks genererar ett fel om gjutningen inte stöds eller om något av elementen inte kan castas.

    Använd try_cast för att omvandla ogiltiga data- eller spillfel till NULL.

Exempel

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

KARTA

targetType Om är en MAP targetKeyType<, targetValueType > och sourceExpr är av typen:

  • VOID

    Resultatet är null för targetType.

  • MAP <sourceKeyType, sourceValueType >

    Om gjutningarna från till och till stöds är resultatet ett MAP<targetKeyType, targetValueType> med alla nycklar gjutna targetKeyType till och alla värden gjutna targetValueTypetill .targetValueTypesourceValueTypetargetKeyTypesourceKeyType

    Azure Databricks genererar ett fel om casten inte stöds eller om någon av nycklarna eller värdena inte kan gjutas.

    Använd try_cast för att omvandla ogiltiga data- eller spillfel till NULL.

Exempel

> 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 Om är en STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > och sourceExpr är av typen:

  • VOID

    Resultatet är null för targetType.

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

    Kan sourceExpr kastas till targetType om alla villkor för dig är sanna:

    • Källtypen har samma antal fält som målet
    • För alla fält: sourceFieldTypeN kan castas till targetFieldTypeN.
    • För alla fältvärden: Källfältvärdet N kan gjutas till targetFieldTypeN och värdet är inte null om målfältet N har markerats som NOT NULL.

    sourceFieldNames, källbegränsningar NOT NULL och källbegränsningar COMMENTbehöver inte matcha targetType och ignoreras.

    Azure Databricks genererar ett fel om casten inte stöds eller om någon av nycklarna eller värdena inte kan gjutas.

    Använd try_cast för att omvandla ogiltiga data- eller spillfel till NULL.

Exempel

> 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