Dela via


Funktionen cast

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

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

Syntax

cast(sourceExpr AS targetType)

Argument

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

Returer

Resultatet är typ targetType.

Följande kombinationer av datatypsgjutning är giltiga:

Källa (rad) Mål(kolumn) TOMRUM numerisk STRÄNG DATE TIMESTAMP TIMESTAMP_NTZ årsmånadsintervall dagtidsintervall BOOLESK BINÄR SAMLING KARTA STRUCT VARIANT OBJEKT
TOMRUM 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
DATE N N Y Y Y Y N N N N N N N Y N
TIMESTAMP 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
STRUCT 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

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

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

numeric

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

  • TOMRUM

    Resultatet är en NULL av den angivna numeriska typen.

  • numerisk

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

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

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

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

  • STRÄNG

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

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

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

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

  • TIMESTAMP

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

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

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

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

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

  • INTERVALL

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

    Måltypen måste vara exakt numerisk.

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

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

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

  • TOMRUM

    Resultatet är en NULL sträng.

  • exakta numeriska

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

  • flyttalsbinär

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

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

  • DATE

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

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

  • TIMESTAMP

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

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

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

  • TIMESTAMP_NTZ

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

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

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

  • årsmånadsintervall

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

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

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

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

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

    • INTERVAL 'D' DAY
    • INTERVAL 'D h' DAY TO HOUR
    • INTERVAL 'D h:m' DAY TO MINUTE
    • INTERVAL 'D h:m:s' DAY TO SECOND
    • INTERVAL 'h' HOUR
    • INTERVAL 'h:m' HOUR TO MINUTE
    • INTERVAL 'm:s' MINUTE TO SECOND
    • INTERVAL 's' SECOND
  • BOOLESK

    Resultatet av det true booleska är literalen STRINGtrue . För false det är strängliteralen 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 gjuten från BINARY till STRING kommer aldrig att mata in ersättningstecken eller generera 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 ->.

  • STRUCT

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

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

  • 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

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

  • TOMRUM

    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.

  • TIMESTAMP

    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

TIMESTAMP

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

  • TOMRUM

    Resultatet är en NULLDATE.

  • numerisk

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

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

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

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

  • STRÄNG

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

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

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

  • DATE

    Resultatet är sourceExprDATE00:00:00hrs.

  • TIMESTAMP_NTZ

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

  • 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

TIMESTAMP_NTZ

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

  • TOMRUM

    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.

  • DATE

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

  • TIMESTAMP

    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

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

Exempel

> SELECT cast(NULL AS INTERVAL YEAR);
  NULL

> SELECT cast('1-4' AS INTERVAL YEAR TO MONTH)::STRING;
  INTERVAL '1-4' YEAR TO MONTH

> SELECT cast('1' AS INTERVAL YEAR TO MONTH);
  error

> SELECT cast(INTERVAL '1-4' YEAR TO MONTH AS INTERVAL MONTH)::STRING;
  INTERVAL '16' MONTH

> SELECT cast(14 AS INTERVAL YEAR TO MONTH)::STRING;
  INTERVAL '1-2' YEAR TO MONTH

> SELECT cast(INTERVAL '1-11' YEAR TO MONTH AS INTERVAL YEAR)::STRING;
  INTERVAL '1' YEAR

dagtidsintervall

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

  • TOMRUM

    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 bråktal tolkas den som bråksekunder.

  • STRÄNG

    sourceExpr måste vara en giltig dayTimeIntervalString.

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

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

  • dagtidsintervall

    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 sourceExpr trunkeras intervallet så att det targetTypepassar .

> SELECT cast(NULL AS INTERVAL HOUR);
  NULL

> SELECT cast('1 4:23' AS INTERVAL DAY TO MINUTE)::STRING;
  INTERVAL '1 04:23' DAY TO MINUTE

> SELECT cast('1' AS INTERVAL DAY TO MINUTE);
  error

> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL MINUTE)::STRING;
  INTERVAL '1703' MINUTE

> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL HOUR)::STRING;
  INTERVAL '28' HOUR

> SELECT cast(125.3 AS INTERVAL MINUTE TO SECOND)::STRING;
  INTERVAL '2:5.3' MINUTE TO SECOND

BOOLESK

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

  • TOMRUM

    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 en ogiltig indatasyntax för typen booleskt fel.

    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

BINARY

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

  • TOMRUM

    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

SAMLING

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

  • TOMRUM

    Resultatet är en NULL av targeType.

  • ARRAY < sourceElementType >

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

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

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

  • 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

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

  • TOMRUM

    Resultatet är en NULL av targetType.

  • MAP <sourceKeyType, sourceValueType >

    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 ger ett felmeddelande 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 [, ...]] >

    Var sourceFieldName och en av typerna STRING castas till targetKeyType och mappas till en kartnyckel. Varje källfältvärde sourceFieldType för är gjutet targetValueType och mappat respektive kartvä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}

STRUCT

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

  • TOMRUM

    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 castas till targetFieldTypeN.
    • För alla fältvärden: Källfältvärdet N kan omvandlas till targetFieldTypeN och värdet är inte null om målfältet N markeras som NOT NULL.

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

    Azure Databricks genererar ett fel om 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 sourceFieldNamematchas med sourceFieldNames. Varje källfältvärde sourceFieldType för gjuts till det matchade targetValueType och mappade till respektive kartvärde.

    Om en targetFieldName inte matchas är NULLfältvärdet .

    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

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

  • TOMRUM

    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.

  • DATE

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

  • TIMESTAMP

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

    Om gjutningen från sourceElementType till VARIANT stöds är VARIANTresultatet , 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