Delen via


cast-functie

Van toepassing op:aangevinkt: ja Databricks SQL aangevinkt: ja Databricks Runtime

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

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:

Bron (rij) Doel (kolom) ONGELDIG numeriek SNAAR DATUM TIJDSTEMPEL TIMESTAMP_NTZ jaar-maandinterval dag-tijdsinterval Boolean BINAIR ARRAY KAART STRUCTUUR VARIANTE OBJECT
ONGELDIG J J J J J J J J J J J J J J N
numeriek N J J N J N J J J N N N N J N
SNAAR N J J J J J J J J J N N N J N
DATUM N N J J J J N N N N N N N J N
TIJDSTEMPEL N J J J J J N N N N N N N J N
TIMESTAMP_NTZ N N J J J J N N N N N N N J N
jaar-maandinterval N J J N N N J N N N N N N N N
dag-tijdsinterval N J J N N N N J N N N N N N N
Boolean N J J N J N N N J N N N N J N
BINAIR N J J N N N N N N J N N N J N
ARRAY N N J N N N N N N N J N N J N
KAART N N J N N N N N N N N J N N N
STRUCTUUR N N J N N N N N N N N N J N N
VARIANTE N J J J J J N N J J J J J J N
OBJECT N N N N N N N N N N N J J N N

Regels en beperkingen op basis van targetType

Waarschuwing

Als in Databricks Runtime spark.sql.ansi.enabledveroorzaakt 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:

  • ONGELDIG

    Het resultaat is een NULL van het opgegeven numerieke type.

  • numeriek

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

    Anders wordt sourceExprhet resultaat afgerond om te passen binnen de beschikbare 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 niet voldoet aan de notatie van letterlijke waarden, veroorzaakt dit een fout.

    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.

  • TIJDSTEMPEL

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

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

    Anders wordt het resultaat afgerond om te passen bij de beschikbare schaal van targetType.

    Als het resultaat buiten het bereik van targetType valt, ontstaat er een overloopfout.

    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.

    Gezien een INTERVAL upper_unit TO lower_unit wordt het resultaat 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.

  • BOOLEAANS

    Als sourceExpr is:

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

    De regels voor het type van de werkelijke waarde van het VARIANT-type zijn van toepassing.

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

> SELECT cast('15'::VARIANT AS INT);
  15

TEKENREEKS

Als de sourceExpr een STRING is, neemt de resulterende STRING de sortering van sourceExprover. In alle andere gevallen is de sortering van de resulterende STRING de standaardsortering.

Om de sortering te wijzigen, voegt u de collate uitdrukking toe.

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

  • ONGELDIG

    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.

  • drijvende-komma binair

    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 een optioneel voorafgaand 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.

  • TIJDSTEMPEL

    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 representatie van het interval-literal. 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 representatie van het interval-literal. 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
  • BOOLEAANS

    Het resultaat van de true Booleaanse waarde is de STRING letterlijke waarde true. Voor false is het de string-literal false. Voor NULL is het een NULL-tekenreeks.

  • BINAIR

    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 STRING zal nooit vervangingstekens injecteren of een fout veroorzaken.

  • ARRAY

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

    In Azure Databricks worden afzonderlijke elementen niet geciteerd of anderszins aangeduid, zelfs als ze haakjes of komma's bevatten.

  • KAART

    Het resultaat is een door komma's gescheiden lijst van cast-sleutelwaardeparen, die tussen accolades { }staat. 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, wat betekent dat deze zelf mogelijk accolades, komma's of -> kunnen bevatten.

  • STRUCTUUR

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

    In Azure Databricks worden afzonderlijke veldwaarden niet met aanhalingstekens omsloten of anderszins gemarkeerd, en deze kunnen zelf accolades of komma's bevatten.

  • VARIANT

    De regels voor het type van de werkelijke waarde van het VARIANT-type zijn van toepassing.

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

> SELECT cast(DATE'2024-01-05'::VARIANT AS STRING);
  2024-01-05

> SELECT cast(5 AS STRING) COLLATE UNICODE;
  5

DATUM

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

  • ONGELDIG

    Het resultaat is een NULLDATE.

  • TEKENREEKS

    sourceExpr moet een geldige dateString zijn.

    Als sourceExpr geen geldige dateString is, retourneert Azure Databricks een fout.

    Gebruik try_cast om ongeldige gegevensfouten om te zetten in NULL.

  • TIJDSTEMPEL

    Het resultaat is het datumgedeelte van de tijdstempel sourceExpr.

  • TIMESTAMP_NTZ

    Het resultaat is het datumgedeelte van de timestamp_ntz sourceExpr.

  • VARIANT

    De typeregels voor de werkelijke waarde die door het VARIANT gegevenstype worden bewaard, zijn van toepassing.

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

> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14'::VARIANT AS DATE);
  1900-10-01

TIJDSTEMPEL

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

  • ONGELDIG

    Het resultaat is een NULLDATE.

  • numeriek

    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 geen geldige timestampString is, retourneert Azure Databricks een fout.

    Gebruik try_cast om ongeldige gegevensfouten om te zetten in NULL.

  • DATUM

    Het resultaat is sourceExprDATE om 00:00:00 uur.

  • TIMESTAMP_NTZ

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

  • VARIANT

    De typeregels voor de werkelijke waarde die door het VARIANT gegevenstype worden bewaard, zijn van toepassing.

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

> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP);
  1900-10-01 00:00:00

TIMESTAMP_NTZ

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

  • ONGELDIG

    Het resultaat is een NULLDATE.

  • TEKENREEKS

    sourceExpr moet een geldige timestampString zijn.

    Als sourceExpr geen geldige timestampString 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.

  • TIJDSTEMPEL

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

  • VARIANT

    De typeregels voor de werkelijke waarde die door het VARIANT gegevenstype worden bewaard, zijn van toepassing.

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

> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP_NTZ);
  1900-10-01 00:00:00

jaar-maandinterval

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

  • ONGELDIG

    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 geen geldige yearMonthIntervalString 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.

    Anders, als het brontype yearMonthIntervalQualifierMONTH bevat, 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

dagtijdinterval

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

  • ONGELDIG

    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 SECOND is, worden breuken geïnterpreteerd als fractionele seconden.

  • TEKENREEKS

    sourceExpr moet een geldige dayTimeIntervalString zijn.

    Als sourceExpr geen geldige dayTimeIntervalString 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 te passen.

> 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

Booleaans

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

  • ONGELDIG

    Het resultaat is een NULL van het type BOOLEAN.

  • numeriek

    Als sourceExpr is:

    • 0: Het resultaat is false.

      Anders is het resultaat true.

  • 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 geeft Azure Databricks een foutmelding van ongeldige invoersyntaxis voor het booleaanse type terug.

    Gebruik try_cast om ongeldige gegevensfouten om te zetten in NULL.

  • VARIANT

    De regels voor het type van de werkelijke waarde van het VARIANT-type zijn van toepassing.

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

> SELECT cast(1::VARIANT AS BOOLEAN);
  true

BINAIR

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

  • ONGELDIG

    Het resultaat is een NULL van het type BINARY.

  • TEKENREEKS

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

  • VARIANT

    De typeregels voor de werkelijke waarde die door het VARIANT gegevenstype worden bewaard, zijn van toepassing.

Voorbeelden

> 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

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

  • ONGELDIG

    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> waarbij alle elementen worden gecast naar targetElementType.

    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.

  • VARIANT

    De typeregels voor de werkelijke waarde die door het VARIANT gegevenstype worden bewaard, zijn van toepassing.

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.

> SELECT cast(array('t', 'f', NULL)::VARIANT AS ARRAY<BOOLEAN>);
  [true, false, NULL]

KAART

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

  • ONGELDIG

    Het resultaat is een NULL van de targetType.

  • MAP <sourceKeyType, sourceValueType >

    Als de casts van sourceKeyType naar targetKeyType en sourceValueType naar targetValueType worden ondersteund, is het resultaat een MAP<targetKeyType, targetValueType> waarbij alle sleutels naar de targetKeyType worden gecast en alle waarden naar de targetValueTypeworden gecast.

    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.

  • VARIANT

    De typeregels voor de werkelijke waarde die door het VARIANT gegevenstype worden bewaard, zijn van toepassing.

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

    Elke sourceFieldName van het type STRING wordt omgezet naar targetKeyType en toegewezen aan een sleutel in de map. Elke bronveldwaarde van sourceFieldType is cast targetValueType en toegewezen aan de respectieve kaartwaarde.

    Azure Databricks genereert een fout als casts niet worden ondersteund of als een van de veldwaarden of sleutelwaarden 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.

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

Structuur

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

  • ONGELDIG

    Het resultaat is een NULL van de targetType.

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

    De sourceExpr kan worden omgezet in targetType als aan al deze 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 velden niet kan worden gecast.

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

  • VARIANT

    De typeregels voor de werkelijke waarde die door het VARIANT gegevenstype worden bewaard, zijn van toepassing.

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

    Alle sourceFieldNames worden vergeleken met sourceFieldNames. Elke bronveldwaarde van sourceFieldType wordt omgezet in de bijbehorende targetValueType en toegewezen aan de respectieve mapwaarde.

    Als een targetFieldName waarde niet overeenkomt, is NULLde veldwaarde .

    Als een sourceFieldName veld niet overeenkomt, wordt het veld genegeerd.

    Azure Databricks genereert een fout als casts niet worden ondersteund of als een van de veldwaarden of sleutelwaarden 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-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

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

  • ONGELDIG

    Het resultaat is een NULL van het type VARIANT.

  • numeriek

    Het resultaat is een VARIANT, die de numerieke waarde vertegenwoordigt. De precisie van DECIMAL typen moet = 38 zijn <.

    Alle integrale numerieke gegevens worden toegewezen aan BIGINT.

    Alle DECIMAL waarden worden toegewezen aan hun nauwste precisie en schaal.

  • TEKENREEKS

    Het resultaat is een VARIANT, die de STRING waarde vertegenwoordigt.

  • DATUM

    Het resultaat is een VARIANT, die de DATE waarde vertegenwoordigt.

  • TIJDSTEMPEL

    Het resultaat is een VARIANT, die de TIMESTAMP waarde vertegenwoordigt.

  • TIMESTAMP_NTZ

    Het resultaat is een VARIANT, die de TIMESTAMP NTZ waarde vertegenwoordigt.

  • BOOLEAANS

    Het resultaat is een VARIANT, die de BOOLEAN waarde vertegenwoordigt.

  • BINAIR

    Het resultaat is een VARIANT, die de BINARY waarde vertegenwoordigt.

  • ARRAY < sourceElementType >

    Als de cast van sourceElementType naar VARIANT wordt ondersteund, is het resultaat VARIANT, dat ARRAY<sourceElementType> vertegenwoordigt.

    Azure Databricks genereert een fout als de cast niet wordt ondersteund.

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

Voorbeelden

> SELECT cast(NULL AS VARIANT);
  NULL

> SELECT cast(5.1000 AS VARIANT);
  5.1

> SELECT schema_of_variant(cast(5 AS VARIANT));
  BIGINT