Dela via


funktion 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) OGILTIG numerisk STRÄNG DATUM TIDSSTÄMPEL TIMESTAMP_NTZ årsmånadsintervall dagtidsintervall BOOLESK BINÄR SAMLING KARTA STRUKTUR Variant OBJEKT
OGILTIG Y Y Y Y Y Y Y Y Y Y Y Y Y Y N
numerisk N Y Y N Y N Y Y Y N N N N Y N
STRÄNG N Y Y Y Y Y Y Y Y Y N N N Y N
DATUM N N Y Y Y Y N N N N N N N Y N
TIDSSTÄMPEL N Y Y Y Y Y N N N N N N N Y N
TIMESTAMP_NTZ N N Y Y Y Y N N N N N N N Y N
årsmånadsintervall N Y Y N N N Y N N N N N N N N
dagtidsintervall N Y Y N N N N Y N N N N N N N
BOOLESK N Y Y N Y N N N Y N N N N Y N
BINÄR N Y Y N N N N N N Y N N N Y N
SAMLING N N Y N N N N N N N Y N N Y N
KARTA N N Y N N N N N N N N Y N N N
STRUKTUR N N Y N N N N N N N N N Y N N
Variant N Y Y Y Y Y N N Y Y Y Y Y Y N
OBJEKT N N N N N N N N N N N Y Y N N

Regler och begränsningar baserade på targetType

Varning

I Databricks Runtime kommer ett spill inte att orsaka ett fel om spark.sql.ansi.enabled är false, utan snarare "cirkulerar" resultatet.

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

numerisk

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

  • OGILTIG

    Resultatet är en NULL av den angivna numeriska typen.

  • numerisk

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

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

    Om värdet ligger utanför intervallet targetType, så utlöses ett översvämningsfel.

    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.

  • TIDSSTÄMPEL

    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 targetType, genereras ett överflödesfel.

    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.

    Med ett INTERVAL upper_unit TO lower_unit mäts resultatet i det totala antalet lower_unit. lower_unit Om SECOND är sant, lagras bråksekunder till höger om decimaltecknet. För alla andra intervall är resultatet alltid ett heltal.

  • BOOLESK

    Om sourceExpr är:

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

    Reglerna för typen av det faktiska värdet för VARIANT typen gäller.

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

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

STRÄNG

Om sourceExpr är en STRING, ärver den resulterande STRING sorteringen från sourceExpr. I alla andra fall är den resulterande sorteringen STRINGstandardsorteringen.

Om du vill ändra sorteringen lägger du till sortera uttryck.

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

  • OGILTIG

    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. När targetType är DECIMAL(p, s) med s större än 0, läggs en decimalpunkt till och avslutande nollor läggs till upp till skalan.

  • flyttalsbinär

    Om det absoluta talet är mindre än 10,000,000 och större eller lika med 0.001 uttrycks resultatet i vanlig notation med minst en siffra före och efter 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 ett valfritt inledande minustecken.

  • DATUM

    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.

  • TIDSSTÄMPEL

    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åkdelar av 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åkdelar av 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
  • BOOLESK

    Resultatet av det booleska true är STRING literalen true. När det gäller false är det strängversionen false. För NULL det är NULL-strängen.

  • BINÄR

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

    Azure Databricks verifierar inte UTF-8-tecknen. En typomvandling från BINARY till STRING kommer aldrig att införa ersättningstecken eller orsaka ett fel.

  • SAMLING

    Resultatet är en kommaseparerad lista över skådespelarelement, som är omgiven av hakparenteser [ ]. 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 nyckel-värde-par, som omges av måsvingar { }. 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 ->.

  • STRUKT

    Resultatet är en kommaavgränsad lista med värden för cast-fält, som är omslutna av 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.

  • Variant

    Reglerna för typen av det faktiska värdet för VARIANT typen gäller.

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

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

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

DATUM

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

  • OGILTIG

    Resultatet är en NULLDATE.

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

  • TIDSSTÄMPEL

    Resultatet är datumdelen av tidsstämpeln sourceExpr.

  • TIMESTAMP_NTZ

    Resultatet är datumdelen av timestamp_ntz sourceExpr.

  • VARIANT

    Typreglerna för det faktiska värdet som innehas av VARIANT datatypen gäller.

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

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

TIDSSTÄMPEL

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

  • OGILTIG

    Resultatet är en NULLDATE.

  • numerisk

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

    Fraktioner som är mindre än mikrosekunder avkortas.

    Om värdet ligger utanför intervallet TIMESTAMP, genereras ett överflödesfel.

    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.

  • DATUM

    Resultatet är sourceExprDATE00:00:00 timmar.

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

  • VARIANT

    Typreglerna för det faktiska värdet som innehas av VARIANT datatypen gäller.

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

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

Tidsstämpel_NTZ

Om targetType är en TIMESTAMP_NTZ typ och sourceExpr är av typen:

  • OGILTIG

    Resultatet är en NULLDATE.

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

  • DATUM

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

  • TIDSSTÄMPEL

    Resultatet är lokal tid som sourceExpr i sessionens tidszon.

  • VARIANT

    Typreglerna för det faktiska värdet som innehas av VARIANT datatypen gäller.

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

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

årsmånadsintervall

Om targetType är ett års-må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

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

  • OGILTIG

    Resultatet är ett NULL dagtidsintervall.

  • 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 tolkas alla bråk såsom bråkdelar av en sekund.

  • 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

    targetType Om 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 trunkeras sourceExpr intervallet för att passa in i 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

BOOLESK

targetType Om targetType är en sourceExpr och är av typen:

  • OGILTIG

    Resultatet är av NULL typen BOOLEAN.

  • numerisk

    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 ett felmeddelande om ogiltig indatasyntax för typen boolean.

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

  • Variant

    Reglerna för typen av det faktiska värdet för VARIANT typen gäller.

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

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

BINÄR

Om targetType är en binär och sourceExpr är av typen:

  • OGILTIG

    Resultatet är av NULL typen BINARY.

  • STRÄNG

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

  • Variant

    Typreglerna för det faktiska värdet som innehas av VARIANT datatypen gäller.

Exempel

> 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

FÄLT

targetType Om targetType är en sourceExpr och är av typen:

  • OGILTIG

    Resultatet är en NULL av targeType.

  • ARRAY < källaelementtyp >

    Om typomvandlingen från sourceElementType till targetElementType stöds, är resultatet ett ARRAY<targetElementType> med alla element typomvandlade till targetElementType.

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

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

  • Variant

    Typreglerna för det faktiska värdet som innehas av VARIANT datatypen gäller.

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.

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

KARTA

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

  • OGILTIG

    Resultatet är en NULL av targetType.

  • MAP <källnyckeltyp, källvärdetyp >

    Om konverteringar från sourceKeyType till targetKeyType och sourceValueType till targetValueType stöds, är resultatet en MAP<targetKeyType, targetValueType> med alla nycklar konverterade till targetKeyType och alla värden konverterade till targetValueType.

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

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

  • VARIANT

    Typreglerna för det faktiska värdet som innehas av VARIANT datatypen gäller.

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

    Varje sourceFieldName av typen STRING konverteras till targetKeyType och mappas till en kartnyckel. Varje källfältvärde sourceFieldType typomvandlas targetValueType och mappas till respektive mappvärde.

    Azure Databricks genererar ett fel om några avgjutningar inte stöds eller om något av fältvärdena eller nyckelvä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.

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

STRUKT

Om targetType är en STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > och sourceExpr är av typen:

  • OGILTIG

    Resultatet är en NULL av targetType.

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

    Kan sourceExpr kastas till targetType om alla dessa villkor är sanna:

    • Källtypen har samma antal fält som målet
    • För alla fält: sourceFieldTypeN kan omvandlas 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 COMMENTs behöver inte matcha targetType och ignoreras.

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

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

  • VARIANT

    Typreglerna för det faktiska värdet som innehas av VARIANT datatypen gäller.

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

    Alla sourceFieldName paras med sourceFieldName. Varje källfältvärde sourceFieldType gjuts till det matchade targetValueType och mappas till det respektive kartvärdet.

    Om en targetFieldName inte matchas, är fältvärdet NULL.

    Om en sourceFieldName inte matchas ignoreras fältet.

    Azure Databricks genererar ett fel om några avgjutningar inte stöds eller om något av fältvärdena eller nyckelvä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-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

Om targetType är en VARIANT och sourceExpr är av typen:

  • OGILTIG

    Resultatet är av NULL typen VARIANT.

  • numerisk

    Resultatet är ett VARIANT, som representerar det numeriska värdet. Precisionen för DECIMAL typer måste vara <= 38.

    Alla numeriska integraler mappas till BIGINT.

    Alla DECIMAL-värden mappas till sin minsta precision och skala.

  • STRÄNG

    Resultatet är en VARIANT, som representerar STRING värdet.

  • DATUM

    Resultatet är en VARIANT, som representerar DATE värdet.

  • TIDSSTÄMPEL

    Resultatet är en VARIANT, som representerar TIMESTAMP värdet.

  • TIMESTAMP_NTZ

    Resultatet är en VARIANT, som representerar TIMESTAMP NTZ värdet.

  • BOOLESK

    Resultatet är en VARIANT, som representerar BOOLEAN värdet.

  • BINÄR

    Resultatet är en VARIANT, som representerar BINARY värdet.

  • ARRAY < källaelementtyp >

    Om omvandlingen från sourceElementType till VARIANT stöds, är resultatet VARIANT, som representerar ARRAY<sourceElementType>.

    Azure Databricks genererar ett fel om casten inte stöds.

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

Exempel

> SELECT cast(NULL AS VARIANT);
  NULL

> SELECT cast(5.1000 AS VARIANT);
  5.1

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