cast-functie

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Hiermee wordt de waarde expr omgezet in het doelgegevenstype type. Deze operator is een synoniem voor de operator :: (dubbele puntteken)

Syntaxis

cast(sourceExpr AS targetType)

Argumenten

  • sourceExpr: Elke castable expressie.
  • targetType: het gegevenstype van het resultaat.

Retouren

Het resultaat is type targetType.

De volgende combinaties van het casten van gegevenstypen zijn geldig:

Brondoel (rij) Doel(kolom) VOID Numerieke TEKENREEKS DATUM TIMESTAMP TIMESTAMP_NTZ jaar-maandinterval dag-tijdsinterval BOOLEAANSE BINAIRE ARRAY KAART STRUCT
VOID J J J J J J J J J J J J J
Numerieke N J Y N Y N J J Y N N N N
TEKENREEKS N J J J J J J J J Y N N N
DATUM N N J J J Y N N N N N N N
TIMESTAMP N J J J J Y N N N N N N N
TIMESTAMP_NTZ N N J J J Y N N N N N N N
jaar-maandinterval N J Y N N N Y N N N N N N
dag-tijdsinterval N J Y N N N N Y N N N N N
BOOLEAANSE N J Y N Y N N N Y N N N N
BINAIRE N J 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
KAART 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 J

Regels en beperkingen op basis van targetType

Waarschuwing

Als in Databricks Runtime spark.sql.ansi.enabled isfalse, veroorzaakt een overloop geen fout, maar wordt het resultaat 'verpakt'.

Een sourceExpr waarde met een ongeldige notatie of ongeldige tekens voor targetType resulteert in een NULL.

numeriek

Als het targetType een numerieke waarde is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL van het opgegeven numerieke type.

  • Numerieke

    Als targetType dit een integraal numerieke waarde is, wordt sourceExprhet resultaat afgekapt tot een geheel getal.

    Anders wordt sourceExprhet resultaat afgerond op een geschikte schaal van targetType.

    Als de waarde buiten het bereik van targetTypevalt, wordt er een overloopfout gegenereerd.

    Gebruik try_cast om overloopfouten om te zetten in NULL.

  • TEKENREEKS

    sourceExpr wordt gelezen als een letterlijke waarde van de targetType.

    Als sourceExpr deze niet voldoet aan de notatie voor letterlijke waarden, wordt er een fout gegenereerd.

    Als de waarde buiten het bereik van de targetTypewaarde valt, wordt er een overloopfout gegenereerd.

    Gebruik try_cast om overloop- en ongeldige indelingsfouten om te zetten in NULL.

  • TIMESTAMP

    Het resultaat is het aantal seconden 1970-01-01 00:00:00 UTC tussen en sourceExpr.

    Als targetType dit een integraal numerieke waarde is, wordt het resultaat afgekapt tot een geheel getal.

    Anders wordt het resultaat afgerond op een geschikte schaal van targetType.

    Als het resultaat buiten het bereik valt targetType, wordt er een overloopfout gegenereerd.

    Gebruik try_cast om overloopfouten om te zetten in NULL.

  • INTERVAL

    Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 11.3 LTS en hoger

    Het doeltype moet een exacte numerieke waarde zijn.

    INTERVAL upper_unit TO lower_unit Gezien een resultaat wordt gemeten in het totale aantal lower_unit. Als dit het lower_unit is SECOND, worden fractionele seconden rechts van het decimaalteken opgeslagen. Voor alle andere intervallen is het resultaat altijd een integraal getal.

  • BOOLEAANSE

    Als sourceExpr dat het volgende is:

    • true: Het resultaat is 0.
    • false: Het resultaat is 1.
    • NULL: Het resultaat is NULL.

Voorbeelden

> 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

Als het targetType een tekenreekstype is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL-tekenreeks.

  • exacte numerieke waarde

    Het resultaat is het letterlijke getal met een optioneel minteken en geen voorloopnullen, behalve het enkele cijfer links van het decimaalteken. Als de waarde targetType groter is DECIMAL(p, s)s dan 0, wordt er een decimaalteken toegevoegd en worden volgnullen opgeteld om te schalen.

  • binair drijvende-komma

    Als het absolute getal kleiner is dan dat 10,000,000 en groter of gelijk is aan 0.001, wordt het resultaat uitgedrukt zonder wetenschappelijke notatie met ten minste één cijfer aan beide zijden van het decimaalteken.

    Anders gebruikt Azure Databricks een mantissa gevolgd door E en een exponent. De mantissa heeft een optioneel voorloopteken gevolgd door één cijfer links van het decimaalteken en het minimale aantal cijfers dat groter is dan nul aan de rechterkant. De exponent heeft en optioneel voorloop minteken.

  • DATUM

    Als het jaar tussen 9999 BCE en 9999 CE ligt, is het resultaat een datumstring van het formulier -YYYY-MM-DD en YYYY-MM-DD respectievelijk.

    Voor jaren vóór of na dit bereik wordt het benodigde aantal cijfers toegevoegd aan het jaaronderdeel en + wordt gebruikt voor CE.

  • TIMESTAMP

    Als het jaar tussen 9999 BCE en 9999 CE ligt, is het resultaat een timestampString van het formulier -YYYY-MM-DD hh:mm:ss en YYYY-MM-DD hh:mm:ss respectievelijk.

    Voor jaren vóór of na dit bereik wordt het benodigde aantal cijfers toegevoegd aan het jaaronderdeel en + wordt gebruikt voor CE.

    Indien nodig worden fractionele seconden .f... toegevoegd.

  • TIMESTAMP_NTZ

    Als het jaar tussen 9999 BCE en 9999 CE ligt, is het resultaat een timestampString van het formulier -YYYY-MM-DD hh:mm:ss en YYYY-MM-DD hh:mm:ss respectievelijk.

    Voor jaren vóór of na dit bereik wordt het benodigde aantal cijfers toegevoegd aan het jaaronderdeel en + wordt gebruikt voor CE.

    Indien nodig worden fractionele seconden .f... toegevoegd.

  • jaar-maandinterval

    Het resultaat is de kortste weergave van de letterlijke interval. Als het interval negatief is, wordt het teken ingesloten in de interval-string. Voor eenheden die kleiner zijn dan 10, worden voorloopnullen weggelaten.

    Een tekenreeks voor een normaal jaar-maandinterval heeft de volgende notatie:

    • INTERVAL 'Y' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • dag-tijdsinterval

    Het resultaat is de kortste weergave van de letterlijke interval. Als het interval negatief is, wordt het teken ingesloten in de interval-string. Voor eenheden kleiner dan 10 worden voorloopnullen weggelaten.

    Een typische tekenreeks voor het tijdsinterval van de dag heeft de volgende notatie:

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

    Het resultaat van de true Booleaanse waarde is de letterlijke truetekenreeks TEKENREEKS, voor false de letterlijke tekenreeks falseTEKENREEKS en voor NULL de NULL-tekenreeks.

  • BINAIRE

    Een resultaat is het binaire getal sourceExpr dat wordt geïnterpreteerd als een UTF-8-tekenreeks.

    Azure Databricks valideert de UTF-8 tekens niet. Een cast van BINARY naar zal STRING nooit vervangingstekens injecteren of een fout veroorzaken.

  • ARRAY

    Het resultaat is een door komma's gescheiden lijst met gegoten elementen, die wordt accolades [ ]met vierkante haken. Eén spatie volgt elke komma. Een NULL element wordt vertaald naar een letterlijke .null

    In Azure Databricks worden afzonderlijke elementen niet aanhalingstekens of anderszins gemarkeerd, die mogelijk haakjes of komma's bevatten.

  • KAART

    Het resultaat is een door komma's gescheiden lijst met cast-sleutelwaardeparen, die wordt accolades met accolades { }. Eén spatie volgt elke komma. Elk sleutelwaardepaar wordt gescheiden door een ->. Een NULL kaartwaarde wordt omgezet in letterlijke nullwaarde.

    In Azure Databricks worden geen afzonderlijke sleutels of waarden aanhalingstekens of anderszins gemarkeerd, die mogelijk accolades, komma's of ->.

  • STRUCT

    Het resultaat is een door komma's gescheiden lijst met cast-veldwaarden, die wordt accolades met accolades { }. Eén spatie volgt elke komma. Een NULL veldwaarde wordt omgezet in een letterlijke waarde null.

    In Azure Databricks worden afzonderlijke veldwaarden niet aanhalingstekens of anderszins gemarkeerd, die mogelijk accolades of komma's bevatten.

Voorbeelden

> 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

Als het targetType een DATUM-type is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL-DATUM.

  • TEKENREEKS

    sourceExpr moet een geldige dateString zijn.

    Als sourceExpr dit een ongeldige dateStringwaarde is, retourneert Azure Databricks een fout.

    Gebruik try_cast om ongeldige gegevensfouten om te zetten in NULL.

  • TIMESTAMP

    Het resultaat is het datumgedeelte van de tijdstempel sourceExpr.

  • TIMESTAMP_NTZ

    Het resultaat is het datumgedeelte van de timestamp_ntz sourceExpr.

Voorbeelden

> 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

Als het targetType een TIMESTAMP-type is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL-DATUM.

  • Numerieke

    sourceExpr wordt gelezen als het aantal seconden sinds 1970-01-01 00:00:00 UTC.

    Breuken kleiner dan microseconden worden afgekapt.

    Als de waarde buiten het bereik valt TIMESTAMP, wordt er een overloopfout gegenereerd.

    Gebruik try_cast om overloopfouten om te zetten in NULL.

  • TEKENREEKS

    sourceExpr moet een geldige timestampString zijn.

    Als sourceExpr dit een ongeldige timestampStringwaarde is, retourneert Azure Databricks een fout.

    Gebruik try_cast om ongeldige gegevensfouten om te zetten in NULL.

  • DATUM

    Het resultaat is de sourceExpr DATUM bij 00:00:00uren.

  • TIMESTAMP_NTZ

Het resultaat is een tijdstempelwaarde met dezelfde velden jaar/maand/dag/uur/minuut/seconde van timestamp_ntz sourceExpr.

Voorbeelden

> 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

Als het targetType een TIMESTAMP_NTZ type is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL-DATUM.

  • TEKENREEKS

    sourceExpr moet een geldige timestampString zijn.

    Als sourceExpr dit een ongeldige timestampStringwaarde is, retourneert Azure Databricks een fout.

    Gebruik try_cast om ongeldige gegevensfouten om te zetten in NULL.

  • DATUM

    Het resultaat is de sourceExpr DATUM bij 00:00:00uren.

  • TIMESTAMP

Het resultaat is lokale tijd als de sourceExpr in de sessietijdzone.

Voorbeelden

> 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

jaar-maandinterval

Als het interval van een targetTypejaarmaand is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL-jaarmaandinterval.

  • integral_numeric

    Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 11.3 LTS en hoger

    De numerieke waarde wordt geïnterpreteerd als het aantal lagere eenheden van het targetTypejaarmaandIntervalQualifier.

  • TEKENREEKS

    sourceExpr moet een geldig jaarMonthIntervalString zijn.

    Als sourceExpr dit een ongeldige yearMonthIntervalStringwaarde is, retourneert Azure Databricks een fout.

    Gebruik try_cast om ongeldige gegevensfouten om te zetten in NULL.

  • jaar-maandinterval

    Als het targetTypejaarMonthIntervalQualifier de waarde bevat MONTH , blijft de waarde ongewijzigd, maar wordt deze opnieuw geïnterpreteerd zodat deze overeenkomt met het doeltype.

    Als dit niet het brontype yearMonthIntervalQualifier bevat MONTH, wordt het resultaat afgekapt tot volledige jaren.

Voorbeelden

> 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

dag-tijdsinterval

Als het targetType een daginterval is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL-dag-tijdsinterval.

  • exact_numeric

    Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 11.3 LTS en hoger

    De numerieke waarde wordt geïnterpreteerd als het aantal lagere eenheden van de targetTypedayTimeIntervalQualifier. Als de eenheid breuken is SECOND , worden geïnterpreteerd als fractionele seconden.

  • TEKENREEKS

    sourceExpr moet een geldige dayTimeIntervalString zijn.

    Als sourceExpr dit een ongeldige dayTimeIntervalStringwaarde is, retourneert Azure Databricks een fout.

    Gebruik try_cast om ongeldige gegevensfouten om te zetten in NULL.

  • dag-tijdsinterval

    Als dayTimeIntervalQualifier targetTypede kleinste eenheid van het brontype dayTimeIntervalQualifier bevat, blijft de waarde ongewijzigd, maar wordt deze opnieuw geïnterpreteerd zodat deze overeenkomt met het doeltype.

    Anders wordt het sourceExpr interval afgekapt om aan de 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

Als het targetType een BOOLEAANSE waarde is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL-booleaanse waarde.

  • Numerieke

    Als sourceExpr dat het volgende is:

    • 0: Het resultaat is false.

      Anders is truehet resultaat .

  • TEKENREEKS

    Als sourcEexpr dit het geval is (niet hoofdlettergevoelig):

    • 'T', 'TRUE', 'Y', 'YES', or '1': Het resultaat is true
    • 'F', 'FALSE', 'N', 'NO', or '0': Het resultaat is false
    • NULL: Het resultaat is NULL

    Anders retourneert Azure Databricks een ongeldige invoersyntaxis voor een booleaanse fout.

    Gebruik try_cast om ongeldige gegevensfouten om te zetten in NULL.

Voorbeelden

> 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

Als het targetType een BINAIR is en sourceExpr van het type is:

  • VOID

    Het resultaat is een BINAIR NULL-bestand.

  • TEKENREEKS

    Het resultaat is de UTF-8-codering van de surceExpr.

Voorbeelden

> SELECT cast(NULL AS BINARY);
  NULL

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

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

ARRAY

Als het targetType een ARRAY < targetElementType > is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL van de targeType.

  • ARRAY < sourceElementType >

    Als de cast van sourceElementType naar targetElementType wordt ondersteund, is het resultaat een ARRAY<targetElementType> met alle elementen die naar de targetElementTypecast worden gecast.

    Azure Databricks genereert een fout als de cast niet wordt ondersteund of als een van de elementen niet kan worden gecast.

    Gebruik try_cast om ongeldige gegevens of overloopfouten om te zetten in NULL.

Voorbeelden

> 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

Als het targetType een MAP < targetKeyType, targetValueType > is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL van de targetType.

  • MAP <sourceKeyType, sourceValueType >

    Als de casts van sourceKeyType en naar sourceValueTypetargetKeyTypetargetValueType worden ondersteund, is het resultaat een MAP<targetKeyType, targetValueType> met alle sleutels cast naar de targetKeyType en alle waarden cast naar de .targetValueType

    Azure Databricks genereert een fout als de cast niet wordt ondersteund of als een van de sleutels of waarden niet kan worden gecast.

    Gebruik try_cast om ongeldige gegevens of overloopfouten om te zetten in NULL.

Voorbeelden

> 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

Als het targetType een STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > is en sourceExpr van het type is:

  • VOID

    Het resultaat is een NULL van de targetType.

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

    De sourceExpr kan worden omgezet in targetType als aan alle voorwaarden wordt voldaan:

    • Het brontype heeft hetzelfde aantal velden als het doel
    • Voor alle velden: sourceFieldTypeN kan worden omgezet in de targetFieldTypeN.
    • Voor alle veldwaarden: de bronveldwaarde N kan worden omgezet targetFieldTypeN naar en de waarde is niet null als doelveld N is gemarkeerd als NOT NULL.

    sourceFieldNames, bronbeperkingen NOT NULL en bronbeperkingen COMMENThoeven niet overeen te komen met de targetType en worden genegeerd.

    Azure Databricks genereert een fout als de cast niet wordt ondersteund of als een van de sleutels of waarden niet kan worden gecast.

    Gebruik try_cast om ongeldige gegevens of overloopfouten om te zetten in NULL.

Voorbeelden

> 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