Sdílet prostřednictvím


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 :: (dvojtečka znaménko)

Syntaxe

cast(sourceExpr AS targetType)

Argumenty

  • sourceExpr: Libovolný přetypovatelný 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) Target(column) PRÁZDNOTA číselný ŘETĚZEC DATE (Datum) ČASOVÉ RAZÍTKO TIMESTAMP_NTZ interval mezi rokem denní interval BOOLEOVSKÝ BINÁRNÍ POLE MAPA STRUCT VARIANTA OBJEKT
PRÁZDNOTA Y Y Y Y Y Y Y Y Y Y Y Y Y Y N
číselný N Y Y N Y N Y Y Y N N N N Y N
ŘETĚZEC N Y Y Y Y Y Y Y Y Y N N N Y N
DATE (Datum) N N Y Y Y Y N N N N N N N Y N
ČASOVÉ RAZÍTKO 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
interval mezi rokem N Y Y N N N Y N N N N N N N N
denní interval N Y Y N N N N Y N N N N N N N
BOOLEOVSKÝ N Y Y N Y N N N Y N N N N Y N
BINÁRNÍ N Y Y N N N N N N Y N N N Y N
POLE N N Y N N N N N N N Y N N Y N
MAPA 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
VARIANTA 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

Pravidla a omezení založená na typu targetType

Upozorňující

Pokud je falseve službě Databricks Runtime spark.sql.ansi.enabled , přetečení nezpůsobí chybu, ale místo toho výsledek zabalí.

Výsledkem sourceExpr hodnoty s neplatným formátem nebo neplatnými znaky bude targetType znak .NULL

numerické

targetType Pokud je číslo a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULL zadaný číselný typ.

  • číselný

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

    V opačném případě se sourceExpr výsledek zaokrouhlí na dostupné měřítko targetType.

    Pokud je hodnota mimo rozsah targetType, vyvolá se chyba přetečení.

    Pomocí try_cast přetečení přetečení přetékejte na NULL.

  • ŘETĚZEC

    sourceExpr je přečteno jako literálová targetTypehodnota .

    Pokud sourceExpr nevyhovuje formátu hodnot literálů, vyvolá se chyba.

    Pokud je hodnota mimo rozsah targetType, vyvolá se chyba přetečení.

    Pomocí try_cast přetečení přetečení a neplatných chyb formátu převést 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 dostupné měřítko targetType.

    Pokud je výsledek mimo rozsah targetType, vyvolá se chyba přetečení.

    Pomocí try_cast přetečení přetečení přetékejte na NULL.

  • INTERVAL

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

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

    INTERVAL upper_unit TO lower_unit Vzhledem k tomu, že výsledek se měří v celkovém počtu lower_unit. Pokud je hodnota lower_unit SECOND, 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);
  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

targetType Pokud je typ STRING a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULL řetězec.

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

    Výsledkem je číslo literálu s nepovinným znaménkem minus a bez počátečních nul s výjimkou jedné číslice vlevo od desetinné čárky. Pokud je hodnota targetType DECIMAL(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í desetinou čá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žívá mantisu následovanou E a exponent. Mantisa má volitelný úvodní znaménko minus následované jednou číslicí vlevo od desetinné čárky a minimální počet číslic větších než nula vpravo. Exponent má a 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 do složky roků přičtou nezbytné číslice a + použijí se pro CE.

  • ČASOVÉ RAZÍTKO

    Pokud je rok mezi 9999 BCE a 9999 CE, výsledkem je časové razítko formuláře -YYYY-MM-DD hh:mm:ss a YYYY-MM-DD hh:mm:ss v uvedeném pořadí.

    Pro roky předcházející nebo po tomto rozsahu se do složky roků přičtou nezbytné číslice a + použijí se pro CE.

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

  • TIMESTAMP_NTZ

    Pokud je rok mezi 9999 BCE a 9999 CE, výsledkem je časové razítko formuláře -YYYY-MM-DD hh:mm:ss a YYYY-MM-DD hh:mm:ss v uvedeném pořadí.

    Pro roky předcházející nebo po tomto rozsahu se do složky roků přičtou nezbytné číslice a + použijí se pro CE.

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

  • interval mezi rokem

    Výsledkem je její 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 má tvar:

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

    Výsledkem je její 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 to je literál falseSTRING . Jedná NULL se o řetězec 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í na BINARY STRING nikdy nevkáže náhradní znaky nebo vyvolá 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é můžou obsahovat závorky nebo čárky.

  • MAPA

    Výsledkem je čárkami oddělený seznam dvojic klíčových hodnot přetypování, který je složený ze 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 neuvozuje nebo jinak označuje jednotlivé klíče nebo hodnoty, které mohou samy o sobě obsahovat složené závorky, čárky nebo ->.

  • STRUCT

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

    Azure Databricks neuvozuje nebo jinak neoznačí jednotlivé hodnoty polí, které můžou 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

DATE

targetType Pokud je typ DATE a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULL DATE.

  • ŘETĚZEC

    sourceExpr musí být platným dateStringem.

    Pokud sourceExpr není platná dateString, Azure Databricks vrátí chybu.

    Pomocí try_cast můžete převést neplatné chyby dat na NULL.

  • ČASOVÉ RAZÍTKO

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

  • TIMESTAMP_NTZ

    Výsledek je datová část 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

> 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

targetType Pokud se jedná o typ TIMESTAMP a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULL DATE.

  • čí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, vyvolá se chyba přetečení.

    Pomocí try_cast přetečení přetečení přetékejte na NULL.

  • ŘETĚZEC

    sourceExpr musí být platný timestampString.

    Pokud sourceExpr není platná timestampString, Azure Databricks vrátí chybu.

    Pomocí try_cast můžete převést neplatné chyby dat na NULL.

  • DATE (Datum)

    Výsledkem je sourceExpr DATE 00: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: 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

Pokud se jedná targetType o typ TIMESTAMP_NTZ a sourceExpr je typu:

  • PRÁZDNOTA

    Výsledkem je NULL DATE.

  • ŘETĚZEC

    sourceExpr musí být platný timestampString.

    Pokud sourceExpr není platná timestampString, Azure Databricks vrátí chybu.

    Pomocí try_cast můžete převést neplatné chyby dat na NULL.

  • DATE (Datum)

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

  • ČASOVÉ RAZÍTKO

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

  • 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

> 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 mezi rokem

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

> 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í interval

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

  • PRÁZDNOTA

    Výsledkem je NULL denní interval.

  • exact_numeric

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

    Číselná hodnota se interpretuje jako počet nižších jednotek targetType dayTimeIntervalQualifier. Pokud je SECOND jednotkou nějaké zlomky, interpretují se jako zlomkové sekundy.

  • ŘETĚZEC

    sourceExpr musí být platný dayTimeIntervalString.

    Pokud sourceExpr není platná dayTimeIntervalString, Azure Databricks vrátí chybu.

    Pomocí try_cast můžete převést neplatné chyby dat na NULL.

  • denní interval

    targetType Pokud dayTimeIntervalQualifier obsahuje nejmenší jednotku zdrojového typu dayTimeIntervalQualifier, hodnota zůstane beze změny, ale bude interpretována tak, aby odpovídala cílovému typu.

    V opačném případě je sourceExpr interval zkrácen tak, aby odpovídal 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

BOOLEOVSKÝ

Pokud se jedná targetType o logickou hodnotu 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 truevýsledek .

  • ŘETĚZEC

    Pokud sourcEexpr je (nerozlišuje malá a velká písmena):

    • '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 vrátí neplatnou vstupní syntaxi pro logickou chybu typu.

    Pomocí try_cast můžete převést neplatné chyby dat 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: 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ÁRNÍ

Pokud je binární targetType 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 pole ARRAY targetElementType > a sourceExpr je typu:< targetType

  • PRÁZDNOTA

    Výsledek je NULL hodnota targeType.

  • ARRAY < sourceElementType >

    Pokud je přetypování targetElementType sourceElementType podporováno, výsledek je s ARRAY<targetElementType> veškerými prvky přetypován na targetElementTypehodnotu .

    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 přetečení na NULLchyby .

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

MAPA

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

  • PRÁZDNOTA

    Výsledek je NULL hodnota targetType.

  • MAP <sourceKeyType, sourceValueType >

    Pokud jsou přetypování z targetKeyType sourceKeyType a sourceValueType na targetValueType podporované, výsledek je s MAP<targetKeyType, targetValueType> přetypování všech kláves na targetKeyType přetypování a všechny hodnoty přetypování na targetValueTypehodnotu .

    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 přetečení na NULLchyby .

  • VARIANTA

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

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

    Každý sourceFieldName typ STRING se přetypuje targetKeyType na klíč mapy a mapuje se na ho. Každá hodnota zdrojového sourceFieldType pole je přetypována targetValueType a mapována odpovídající hodnota mapování.

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

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

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

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

  • PRÁZDNOTA

    Výsledek je NULL hodnota 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 lze přetypovat 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í zdroje NOT NULL a zdroje COMMENTse nemusí shodovat targetType s 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 přetečení na NULLchyby .

  • 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 sourceFieldType pole se přetypuje na shodnou targetValueType a namapovanou na odpovídající hodnotu mapy.

    targetFieldName Pokud se hodnota pole neshoduje, hodnota pole je NULL.

    sourceFieldName Pokud se neshoduje, pole se ignoruje.

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

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

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

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í sourceElementType VARIANT podporováno, výsledek představuje VARIANTARRAY<sourceElementType>.

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

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

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