Funkce cast

Platí pro:zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

Přetypuje hodnotu expr na cílový datový typ type. Tento operátor je synonymem pro :: operátor dvojtečky (dvojtečka).

Syntaxe

cast(sourceExpr AS targetType)

Argumenty

  • sourceExpr: Libovolný převoditelný výraz.
  • targetType: Datový typ výsledku.

Návraty

Výsledek je typ targetType.

Platné jsou následující kombinace přetypování datových typů:

Zdroj (řádek) Cíl (sloupec) PRÁZDNOTA číselný ŘETĚZEC DATE (Datum) ČASOVÉ RAZÍTKO TIMESTAMP_NTZ interval rok-měsíc časový interval během dne BOOLEOVSKÝ BINÁRNÍ POLE MAPA STRUKTURA VARIANTA OBJEKT
PRÁZDNOTA Й Й Й Й Й Й Й Й Й Й Й Й Й Й N
číselný N Й Й N Й N Й Й Й N N N N Й N
ŘETĚZEC N Й Й Й Й Й Й Й Й Й N N N Й N
DATE (Datum) N N Й Й Й Й N N N N N N N Й N
ČASOVÉ RAZÍTKO N Й Й Й Й Й N N N N N N N Й N
TIMESTAMP_NTZ N N Й Й Й Й N N N N N N N Й N
interval rok-měsíc N Й Й N N N Й N N N N N N N N
časový interval během dne N Й Й N N N N Й N N N N N N N
BOOLEOVSKÝ N Й Й N Й N N N Й N N N N Й N
BINÁRNÍ N Й Й N N N N N N Й N N N Й N
POLE N N Й N N N N N N N Й N N Й N
MAPA N N Й N N N N N N N N Й N N N
STRUKTURA N N Й N N N N N N N N N Й N N
VARIANTA N Й Й Й Й Й N N Й Й Й Й Й Й N
OBJEKT N N N N N N N N N N N Й Й N N

Běžné chybové podmínky

Pravidla a omezení založená na typu targetType

Varování

V Databricks Runtime, pokud je spark.sql.ansi.enabled nastaveno na false, přetečení nezpůsobí chybu, ale místo toho "zabalí" výsledek.

Hodnota sourceExpr s neplatným formátem nebo neplatnými znaky pro targetType povede k NULL.

numerické

Pokud je targetTypečíslo a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULL určitého číselného typu.

  • číselný

    Pokud targetType je celočíselný číselný, výsledek se sourceExprzkrátí na celé číslo.

    V opačném případě se sourceExprvýsledek zaokrouhlí, aby se přizpůsobil dostupnému měřítku targetType.

    Pokud je hodnota mimo rozsah targetType, Azure Databricks vyvolá CAST_OVERFLOW.

    Pomocí try_cast převeďte chyby přetečení na NULL.

  • ŘETĚZEC

    sourceExpr je přečteno jako literální hodnota targetType.

    Pokud sourceExpr nevyhovuje formátu hodnot literálů, Azure Databricks vyvolá CAST_INVALID_INPUT.

    Pokud je hodnota mimo rozsah targetType, Azure Databricks vyvolá CAST_OVERFLOW.

    Pomocí try_cast převést chyby přetečení a neplatného formátu na NULL.

  • ČASOVÉ RAZÍTKO

    Výsledkem je počet sekund uplynulých mezi 1970-01-01 00:00:00 UTC a sourceExpr.

    Pokud targetType je celočíselný číselný, výsledek se zkrátí na celé číslo.

    V opačném případě se výsledek zaokrouhlí na to, aby odpovídal dostupnému měřítku targetType.

    Pokud je výsledek mimo rozsah targetType, Azure Databricks vyvolá CAST_OVERFLOW.

    Pomocí try_cast převeďte chyby přetečení na NULL.

  • INTERVAL

    Platí pro:označeno ano Databricks SQL označeno ano Databricks Runtime 11.3 LTS a vyšší

    Cílový typ musí být přesný číselný.

    Výsledek dané INTERVAL upper_unit TO lower_unit se měří v celkovém počtu lower_unit. Pokud je hodnota lower_unitSECOND, desetinné sekundy jsou uloženy vpravo od desetinné čárky. Ve všech ostatních intervalech je výsledkem vždy celočíselné číslo.

  • BOOLEOVSKÝ

    Pokud sourceExpr je:

    • true: Výsledek je 1.
    • false: Výsledek je 0.
    • NULL: Výsledek je NULL.
  • VARIANTA

    Pravidla typu skutečné hodnoty VARIANT typu platí.

Příklady

> 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);
  Error: CAST_OVERFLOW

> SELECT cast(128 AS DECIMAL(2, 0));
  Error: CAST_OVERFLOW

> SELECT cast('123' AS INT);
  123

> SELECT cast('123.0' AS INT);
  Error: CAST_INVALID_INPUT

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

ŘETĚZEC

Pokud je sourceExprSTRING, výsledný STRING dědí řazení sourceExpr. Ve všech ostatních případech je kolace pro výsledné STRING výchozí kolací .

Pokud chcete změnit kolaci, přidejte výraz kolace.

Pokud je targetTypeSTRING typ a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULL řetězec.

  • přesná číselná čísla

    Výsledkem je číslo jako doslovný zápis s nepovinným znaménkem minus a bez počátečních nul kromě jedné číslice vlevo od desetinné čárky. Pokud je hodnota targetTypeDECIMAL(p, s)s větší 0, přidá se desetinná čárka a koncové nuly se přidají do měřítka.

  • binární číslo s plovoucí řádovou čárkou

    Pokud je absolutní číslo menší 10,000,000 a větší nebo rovno 0.001, výsledek se vyjadřuje bez vědeckého zápisu s alespoň jednou číslicí na obou stranách desetinné čárky.

    V opačném případě Azure Databricks použije mantisu následovanou E a exponent. Mantisa může mít volitelné úvodní znaménko minus následovaná jednou číslicí nalevo od desetinné čárky a minimálním počtem číslic větších než nula napravo. Exponent má volitelné počáteční znaménko minus.

  • DATE (Datum)

    Pokud je rok mezi 9999 BCE a 9999 CE, výsledek je dateString formuláře -YYYY-MM-DD a YYYY-MM-DD v uvedeném pořadí.

    Pro roky předcházející nebo po tomto rozsahu se k letopočtu přidají nezbytné číslice a + se používá pro CE.

  • ČASOVÉ RAZÍTKO

    Pokud je rok mezi 9999 př. n. l. a 9999 n. l., výsledkem je časové razítko ve formátu -YYYY-MM-DD hh:mm:ss a YYYY-MM-DD hh:mm:ss respektive.

    Pro roky předcházející nebo po tomto rozsahu se k letopočtu přidají nezbytné číslice a + se používá pro CE.

    Zlomkové sekundy .f... se v případě potřeby přidají.

  • TIMESTAMP_NTZ

    Pokud je rok mezi 9999 př. n. l. a 9999 n. l., výsledkem je časové razítko ve formátu -YYYY-MM-DD hh:mm:ss a YYYY-MM-DD hh:mm:ss respektive.

    Pro roky předcházející nebo po tomto rozsahu se k letopočtu přidají nezbytné číslice a + se používá pro CE.

    Zlomkové sekundy .f... se v případě potřeby přidají.

  • interval rok-měsíc

    Výsledkem je nejkratší reprezentace literálu intervalu. Pokud je interval záporný, je znaménko vloženo do znaku interval-string. U jednotek menších než 10 jsou úvodní nuly vynechány.

    Typický řetězec intervalu roku a měsíce má tvar:

    • INTERVAL 'Y' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • denní časový interval

    Výsledkem je nejkratší reprezentace literálu intervalu. Pokud je interval záporný, je znaménko vloženo do znaku interval-string. U jednotek menších než 10 se vynechá počáteční nuly.

    Typický řetězec denního časového intervalu má tvar:

    • 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
  • BOOLEOVSKÝ

    Výsledkem logické hodnoty true je STRING literál true. Pro false je to literál STRING false. Řetězec NULL je NULL.

  • BINÁRNÍ

    Výsledkem je binární sourceExpr interpretovaná jako sekvence znaků UTF-8.

    Azure Databricks neověřuje znaky UTF-8. Přetypování z na nikdy nevloží náhradní znaky ani nevyvolá chybu.

  • POLE

    Výsledkem je čárkami oddělený seznam prvků přetypování, který je složený závorkami [ ]. Jedna mezera následuje za každou čárkou. Prvek NULL je přeložen do literálu null.

    Azure Databricks neuvozuje ani jinak neoznačí jednotlivé prvky, které mohou samy obsahovat závorky nebo čárky.

  • MAPA

    Výsledkem je čárkami oddělený seznam dvojic klíčových hodnot, který je uzavřený do složených závorek { }. Jedna mezera následuje za každou čárkou. Každý pár hodnot klíče je oddělený ->hodnotou . Hodnota NULL mapy je přeložena do literálu null.

    Azure Databricks neoznačuje jednotlivé klíče nebo hodnoty, které můžou obsahovat složené závorky, čárky nebo ->.

  • STRUKTURA

    Výsledkem je čárkami oddělený seznam hodnot polí typu, který je uzavřen ve složených závorkách { }. Jedna mezera následuje za každou čárkou. Hodnota NULL pole je přeložena do literálu null.

    Azure Databricks neoznačí nebo jinak označí jednotlivé hodnoty polí, které mohou samy o sobě obsahovat složené závorky nebo čárky.

  • VARIANTA

    Pravidla typu skutečné hodnoty VARIANT typu platí.

Příklady

> 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

Pokud je targetTypeDATE typ a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULLDATE.

  • ŘETĚZEC

    sourceExpr musí být platným dateStringem.

    Pokud sourceExpr není platný dateString, Azure Databricks vyvolá CAST_INVALID_INPUT.

    Pomocí try_cast můžete převést chyby způsobené neplatnými daty na NULL.

  • ČASOVÉ RAZÍTKO

    Výsledek je datumová část časového razítka sourceExpr.

  • TIMESTAMP_NTZ

    Výsledkem je část data z timestamp_ntz sourceExpr.

  • VARIANTA

    Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem VARIANT .

Příklady

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

> 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

ČASOVÉ RAZÍTKO

Pokud je targetTypeTIMESTAMP typ a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULLDATE.

  • číselný

    sourceExpr je přečteno jako počet sekund od 1970-01-01 00:00:00 UTC.

    Zlomky menší než mikrosekundy jsou zkráceny.

    Pokud je hodnota mimo rozsah TIMESTAMP, Azure Databricks vyvolá CAST_OVERFLOW.

    Pomocí try_cast převeďte chyby přetečení na NULL.

  • ŘETĚZEC

    sourceExpr musí být platný timestampString.

    Pokud sourceExpr není platný timestampString, Azure Databricks vyvolá CAST_INVALID_INPUT.

    Pomocí try_cast můžete převést chyby způsobené neplatnými daty na NULL.

  • DATE (Datum)

    Výsledkem je sourceExprDATE00:00:00hodina.

  • TIMESTAMP_NTZ

Výsledkem je hodnota časového razítka se stejným polem roku, měsíce, dne, hodiny, minuty a sekundy timestamp_ntz sourceExpr.

  • VARIANTA

    Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem VARIANT .

Příklady

> 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: CAST_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: CAST_INVALID_INPUT

> 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

Pokud je targetTypeTIMESTAMP_NTZ typ a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULLDATE.

  • ŘETĚZEC

    sourceExpr musí být platný timestampString.

    Pokud sourceExpr není platný timestampString, Azure Databricks vyvolá CAST_INVALID_INPUT.

    Pomocí try_cast můžete převést chyby způsobené neplatnými daty na NULL.

  • DATE (Datum)

    Výsledkem je sourceExpr DATUM v 00:00:00hodinách.

  • ČASOVÉ RAZÍTKO

    Výsledek je místní čas v časovém pásmu relace sourceExpr.

  • VARIANTA

    Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem VARIANT .

Příklady

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

> 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

interval rok-měsíc

targetType Pokud je interval rok-měsíc a sourceExpr je typu:

Příklady

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

> 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

denní doba

Pokud se jedná targetType o denní interval a sourceExpr je typu:

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

> 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

BOOLEOVSKÝ

Pokud je targetType typu BOOLEAN a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledek je NULL typu BOOLEAN.

  • číselný

    Pokud sourceExpr je:

    • 0: Výsledek je false.

      V opačném případě je výsledek true.

  • ŘETĚZEC

    Pokud je sourcEexpr (nezohledňuje velikost písmen):

    • 'T', 'TRUE', 'Y', 'YES', or '1': Výsledek je true
    • 'F', 'FALSE', 'N', 'NO', or '0': Výsledek je false
    • NULL: Výsledek je NULL

    V opačném případě Azure Databricks vyvolá CAST_INVALID_INPUT.

    Pomocí try_cast můžete převést chyby způsobené neplatnými daty na NULL.

  • VARIANTA

    Pravidla typu skutečné hodnoty VARIANT typu platí.

Příklady

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

> 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ÁRNÍ

Pokud je targetTypebinární a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledek je NULL typu BINARY.

  • ŘETĚZEC

    Výsledkem je kódování surceExprUTF-8 .

  • VARIANTA

    Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem VARIANT .

Příklady

> 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

POLE

Pokud je targetType typu ARRAY < targetElementType > a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledek je NULL z targeType.

  • ARRAY < sourceElementType >

    Pokud je přetypování z sourceElementType na targetElementType podporováno, výsledek je ARRAY<targetElementType>, ve kterém jsou všechny prvky přetypovány na targetElementType.

    Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje nebo pokud některý z prvků nejde přetypovat.

    Pomocí try_cast můžete převést neplatná data nebo chyby způsobené přetečením na NULL.

  • VARIANTA

    Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem VARIANT .

Příklady

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

> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
  Error: CAST_INVALID_INPUT

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

MAPA

targetType Pokud je MAP < typu targetKeyType, targetValueType > a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledek je NULL z targetType.

  • MAP <sourceKeyType, sourceValueType >

    Pokud jsou přetypování z sourceKeyType na targetKeyType a z sourceValueType na targetValueType podporovaná, výsledkem je MAP<targetKeyType, targetValueType>, kde jsou všechny klávesy přetypovány na targetKeyType a všechny hodnoty přetypovány na targetValueType.

    Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje nebo pokud některé z klíčů nebo hodnot nejde přetypovat.

    Pomocí try_cast můžete převést neplatná data nebo chyby způsobené přetečením na NULL.

  • VARIANTA

    Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem VARIANT .

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

    Každý sourceFieldName typu STRING je přetypován na targetKeyType a přiřazen jako klíč mapy. Každá hodnota zdrojového sourceFieldType pole je přetypována targetValueType a přiřazena k odpovídající mapové hodnotě.

    Azure Databricks vyvolá chybu, pokud některé přetypování nejsou podporovány nebo pokud některé hodnoty polí nebo hodnoty klíče nelze přetypovat.

    Pomocí try_cast můžete převést neplatná data nebo chyby způsobené přetečením na NULL.

Příklady

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

> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
  Error: CAST_INVALID_INPUT

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

struktura

Pokud se jedná targetType o STRUCT <[targetFieldName: targetFieldType [NOT NULL] [COMMENT str] [, ...]] > a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledek je NULL z targetType.

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

    Lze sourceExpr přetypovat na targetType , pokud jsou splněny všechny tyto podmínky:

    • Typ zdroje má stejný počet polí jako cíl.
    • Pro všechna pole: sourceFieldTypeN může být přetypováno na targetFieldTypeN.
    • Pro všechny hodnoty polí: Zdrojová hodnota pole N může být přetypována targetFieldTypeN a hodnota není null, pokud je cílové pole N označeno jako NOT NULL.

    sourceFieldNames, omezení zdrojů NOT NULL a COMMENTs se nemusí shodovat se targetType a jsou ignorovány.

    Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje nebo pokud některá z polí nejde přetypovat.

    Pomocí try_cast můžete převést neplatná data nebo chyby způsobené přetečením na NULL.

  • VARIANTA

    Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem VARIANT .

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

    Všechna sourceFieldNames jsou shodná s sourceFieldName. Každá hodnota zdrojového pole sourceFieldType se přetypuje na odpovídající targetValueType a namapuje na příslušnou hodnotu v mapě.

    Pokud se targetFieldName neshoduje, hodnota pole je NULL.

    Pokud se sourceFieldName neshoduje, pole se ignoruje.

    Azure Databricks vyvolá chybu, pokud některé přetypování nejsou podporovány nebo pokud některé hodnoty polí nebo hodnoty klíče nelze přetypovat.

    Pomocí try_cast můžete převést neplatná data nebo chyby způsobené přetečením na NULL.

Příklady

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

> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
  Error: DATATYPE_MISMATCH

> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
  Error: CAST_INVALID_INPUT

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

varianta

Pokud se jedná targetType o variantu a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledek je NULL typu VARIANT.

  • číselný

    Výsledkem je hodnota VARIANTpředstavující číselnou hodnotu. Přesnost DECIMAL typů musí být <= 38.

    Všechny celočíselné číselné hodnoty jsou mapovány na BIGINT.

    Všechny DECIMAL hodnoty se mapují na jejich nejužší přesnost a měřítko.

  • ŘETĚZEC

    Výsledkem je hodnota VARIANTpředstavující STRING hodnotu.

  • DATE (Datum)

    Výsledkem je hodnota VARIANTpředstavující DATE hodnotu.

  • ČASOVÉ RAZÍTKO

    Výsledkem je hodnota VARIANTpředstavující TIMESTAMP hodnotu.

  • TIMESTAMP_NTZ

    Výsledkem je hodnota VARIANTpředstavující TIMESTAMP NTZ hodnotu.

  • BOOLEOVSKÝ

    Výsledkem je hodnota VARIANTpředstavující BOOLEAN hodnotu.

  • BINÁRNÍ

    Výsledkem je hodnota VARIANTpředstavující BINARY hodnotu.

  • ARRAY < sourceElementType >

    Pokud je přetypování z sourceElementType na VARIANT podporováno, výsledkem je VARIANT, což představuje ARRAY<sourceElementType>.

    Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje.

  • STRUKTURA

    Toto přetypování není přímo podporováno, protože VARIANT nemůže zachovat pořadí polí struktury. Pomocí to_variant_object převeďte STRUCT na VARIANT jako OBJECT.

  • MAPA

    Toto přetypování není přímo podporováno, protože VARIANT nemůže udržet typ MAP. Pomocí to_variant_object převeďte MAP na VARIANT jako OBJECT. Klíče mapy musí mít textové řetězce.

    Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje.

    Pomocí try_cast můžete převést neplatná data nebo chyby způsobené přetečením na NULL.

Příklady

> SELECT cast(NULL AS VARIANT);
  NULL

> SELECT cast(5.1000 AS VARIANT);
  5.1

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