Delen via


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) LEEGTE numeriek SNAAR DATUM TIMESTAMP TIMESTAMP_NTZ jaar-maandinterval dag-tijdsinterval BOOLEAANS BINAIR ARRAY KAART STRUCT VARIANT OBJECT
LEEGTE J J J J J J J J J J J J J Y N
numeriek N J Y N Y N J J Y N N N N Y N
SNAAR N J J J J J J J J Y N N N Y N
DATUM N N J J J Y N N N N N N N Y N
TIMESTAMP N J J J J Y N N N N N N N Y N
TIMESTAMP_NTZ N N J J J Y N N N N N N N Y N
jaar-maandinterval N J Y N N N Y N N N N N N N N
dag-tijdsinterval N J Y N N N N Y N N N N N N N
BOOLEAANS N J Y N Y N N N Y N N N N Y N
BINAIR N J Y N N N N N N Y N N N Y N
ARRAY N N Y N N N N N N N Y N N Y N
KAART N N Y N N N N N N N N Y N N N
STRUCT N N Y N N N N N N N N N Y N N
VARIANT N J J J J Y N N J J J J J Y N
OBJECT N N N N N N N N N N N J Y N N

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:

  • LEEGTE

    Het resultaat is een NULL van het opgegeven numerieke type.

  • numeriek

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

    Anders wordt sourceExpr het 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.

  • SNAAR

    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.

  • BOOLEAANS

    Als sourceExpr dat het volgende is:

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

    De regels van 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

STRING

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

  • LEEGTE

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

    Het resultaat van de true Booleaanse waarde is de STRING letterlijke waarde true. Voor false het is de letterlijke tekenreeks false. Dit NULL is de 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 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.

  • VARIANT

    De regels van 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

DATUM

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

  • LEEGTE

    Het resultaat is een NULL DATE.

  • SNAAR

    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.

  • 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

TIMESTAMP

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

  • LEEGTE

    Het resultaat is een NULL DATE.

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

  • SNAAR

    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 DATE uren 00:00:00.

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

  • LEEGTE

    Het resultaat is een NULL DATE.

  • SNAAR

    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.

  • 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 targetType jaarmaand is en sourceExpr van het type is:

  • LEEGTE

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

  • SNAAR

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

  • LEEGTE

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

  • SNAAR

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

  • LEEGTE

    Het resultaat is een van het NULL type BOOLEAN.

  • numeriek

    Als sourceExpr dat het volgende is:

    • 0: Het resultaat is false.

      Anders is truehet resultaat .

  • SNAAR

    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.

  • VARIANT

    De regels van 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

BINARY

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

  • LEEGTE

    Het resultaat is een van het NULL type BINARY.

  • SNAAR

    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:

  • LEEGTE

    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.

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

MAP

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

  • LEEGTE

    Het resultaat is een NULL van de targetType.

  • MAP <sourceKeyType, sourceValueType >

    Als de casts van sourceKeyType en naar sourceValueType targetKeyType targetValueType 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.

  • VARIANT

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

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

    Elk sourceFieldName type STRING wordt gecast naar targetKeyType en toegewezen aan een kaartsleutel. 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}

STRUCT

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

  • LEEGTE

    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 waarde van sourceFieldType het bronveld wordt omgezet in de overeenkomende targetValueType en toegewezen aan de respectieve kaartwaarde.

    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:

  • LEEGTE

    Het resultaat is een van het NULL 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 kleinste precisie en schaal.

  • SNAAR

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

  • DATUM

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

  • TIMESTAMP

    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, wordt VARIANThet resultaat weergegeven.ARRAY<sourceElementType>

    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