Udostępnij za pośrednictwem


Funkcja cast

Dotyczy: zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime

Rzutuje wartość expr na docelowy typ typedanych . Ten operator jest synonimem dla operatora :: (znak dwukropka)

Składnia

cast(sourceExpr AS targetType)

Argumenty

  • sourceExpr: dowolne wyrażenie rzutowalne.
  • targetType: typ danych wyniku.

Zwraca

Wynik to typ targetType.

Prawidłowe są następujące kombinacje rzutowania typów danych:

Źródło (wiersz) Target(kolumna) NIEWAŻNY numeryczny STRUNA DATA TIMESTAMP TIMESTAMP_NTZ interwał miesiąca roku Interwał dnia BOOLOWSKI DWÓJKOWY TABLICA MAPA STRUCT WARIANT SPRZECIWIAĆ SIĘ
NIEWAŻNY Y Y Y Y Y Y Y Y Y Y Y Y Y Y N
numeryczny N Y Y N Y N Y Y Y N N N N Y N
STRUNA N Y Y Y Y Y Y Y Y Y N N N Y N
DATA 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
interwał miesiąca roku N Y Y N N N Y N N N N N N N N
Interwał dnia N Y Y N N N N Y N N N N N N N
BOOLOWSKI N Y Y N Y N N N Y N N N N Y N
DWÓJKOWY N Y Y N N N N N N Y N N N Y N
TABLICA 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
WARIANT N Y Y Y Y Y N N Y Y Y Y Y Y N
SPRZECIWIAĆ SIĘ N N N N N N N N N N N Y Y N N

Reguły i ograniczenia oparte na typie targetType

Ostrzeżenie

W środowisku Databricks Runtime, jeśli spark.sql.ansi.enabled to false, przepełnienie nie spowoduje błędu, ale zamiast tego będzie "zawijać" wynik.

Wartość sourceExpr z nieprawidłowym formatem lub nieprawidłowymi znakami targetType spowoduje wyświetlenie wartości NULL.

numeryczne

targetType Jeśli element jest liczbowy i sourceExpr ma typ:

  • NIEWAŻNY

    Wynikiem jest NULL określony typ liczbowy.

  • numeryczny

    Jeśli targetType jest liczbą całkowitą, wynik jest sourceExpr obcinany do liczby całkowitej.

    W przeciwnym razie wynik jest sourceExpr zaokrąglany do dostępnej targetTypeskali .

    Jeśli wartość znajduje się poza zakresem targetType, zostanie zgłoszony błąd przepełnienia.

    Użyj try_cast , aby przekształcić błędy przepełnienia w NULL.

  • STRUNA

    sourceExprjest odczytywany jako wartość literału .targetType

    Jeśli sourceExpr format wartości literału nie jest zgodny z formatem, zostanie zgłoszony błąd.

    Jeśli wartość znajduje się poza zakresem targetType, zostanie zgłoszony błąd przepełnienia.

    Użyj try_cast , aby przekształcić błędy przepełnienia i nieprawidłowego formatu na NULL.

  • TIMESTAMP

    Wynikiem jest liczba sekund, które upłynęły między 1970-01-01 00:00:00 UTC i sourceExpr.

    Jeśli targetType jest liczbą całkowitą, wynik jest obcinany do liczby całkowitej.

    W przeciwnym razie wynik jest zaokrąglany do dostępnej targetTypeskali .

    Jeśli wynik znajduje się poza zakresem targetType, zostanie zgłoszony błąd przepełnienia.

    Użyj try_cast , aby przekształcić błędy przepełnienia w NULL.

  • INTERWAŁ

    Dotyczy: zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime 11.3 LTS i nowsze

    Typ docelowy musi być dokładną liczbą.

    Biorąc pod uwagę, że INTERVAL upper_unit TO lower_unit wynik jest mierzony w łącznej liczbie lower_unit. Jeśli wartość lower_unit to SECOND, sekundy ułamkowe są przechowywane po prawej stronie punktu dziesiętnego. W przypadku wszystkich innych interwałów wynik jest zawsze liczbą całkowitą.

  • BOOLOWSKI

    Jeśli sourceExpr :

    • true: Wynik to 1.
    • false: Wynik wynosi 0.
    • NULL: Wynik to NULL.
  • WARIANT

    Stosowane są reguły typu rzeczywistej wartości VARIANT typu.

Przykłady

> 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

STRUNA

targetType Jeśli parametr jest typem STRING i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik jest ciągiem NULL .

  • dokładna liczba

    Wynikiem jest liczba literału z opcjonalnym znakiem minus i bez zer wiodących z wyjątkiem pojedynczej cyfry z lewej strony separatora dziesiętnego. targetType Jeśli element ma DECIMAL(p, s) s wartość większą niż 0, dodawany jest punkt dziesiętny, a końcowe zera są dodawane w górę w celu skalowania.

  • binarne zmiennoprzecinkowe

    Jeśli liczba bezwzględna jest mniejsza i 10,000,000 większa lub równa 0.001, wynik jest wyrażony bez notacji naukowej z co najmniej jedną cyfrą po obu stronach przecinka dziesiętnego.

    W przeciwnym razie usługa Azure Databricks używa mantissa, po której E następuje wykładnik. Mantissa ma opcjonalny wiodący znak minus, po którym następuje jedna cyfra po lewej stronie przecinka dziesiętnego, a minimalna liczba cyfr większa niż zero po prawej stronie. Wykładnik ma i opcjonalny wiodący znak minus.

  • DATA

    Jeśli rok mieści się w przedziale od 9999 do 9999 CE, wynikiem jest odpowiednio dataString formularza -YYYY-MM-DD i YYYY-MM-DD .

    Przez lata wcześniejsze lub po tym zakresie do składnika roku jest dodawana wymagana liczba cyfr i + jest używana dla CE.

  • TIMESTAMP

    Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest znacznik czasu formularza -YYYY-MM-DD hh:mm:ss i YYYY-MM-DD hh:mm:ss odpowiednio.

    Przez lata wcześniejsze lub po tym zakresie do składnika roku jest dodawana wymagana liczba cyfr i + jest używana dla CE.

    W razie potrzeby dodawane są sekundy .f... ułamkowe.

  • TIMESTAMP_NTZ

    Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest znacznik czasu formularza -YYYY-MM-DD hh:mm:ss i YYYY-MM-DD hh:mm:ss odpowiednio.

    Przez lata wcześniejsze lub po tym zakresie do składnika roku jest dodawana wymagana liczba cyfr i + jest używana dla CE.

    W razie potrzeby dodawane są sekundy .f... ułamkowe.

  • interwał miesiąca roku

    Wynik jest najkrótszą reprezentacją literału interwału. Jeśli interwał jest ujemny, znak jest osadzony w elemecie interval-string. W przypadku jednostek mniejszych niż 10 pominięto zera wiodącego.

    Typowy ciąg interwału rok-miesiąc ma postać:

    • INTERVAL 'Y' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • Interwał dnia

    Wynik jest najkrótszą reprezentacją literału interwału. Jeśli interwał jest ujemny, znak jest osadzony w elemecie interval-string. W przypadku jednostek mniejszych niż 10 pominięto zera wiodące.

    Typowy ciąg interwału czasu dnia ma postać:

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

    Wynikiem wartości logicznej true STRING jest literał true. W tym przypadku false jest to literał falseSTRING . W tym przypadku NULL jest to ciąg o wartości NULL.

  • DWÓJKOWY

    Wynikiem jest binarny sourceExpr interpretowany jako sekwencja znaków UTF-8.

    Usługa Azure Databricks nie weryfikuje znaków UTF-8. Rzutowanie z BINARY do nigdy nie będzie wstrzykiwać STRING znaków podstawienia lub zgłaszać błąd.

  • TABLICA

    Wynikiem jest rozdzielona przecinkami lista elementów rzutowanych, które są ujmowane nawiasami kwadratowymi [ ]. Jedna spacja następuje po każdym przecince. Element NULL jest tłumaczony na literał null.

    Usługa Azure Databricks nie cytuje ani nie oznacza w inny sposób pojedynczych elementów, które mogą zawierać nawiasy lub przecinki.

  • MAPA

    Wynikiem jest rozdzielona przecinkami lista par wartości klucza rzutowania, która jest nawiasem klamrowym { }. Jedna spacja następuje po każdym przecince. Każda para wartości klucza jest oddzielona wartością ->. NULL Wartość mapy jest tłumaczona na literał null.

    Usługa Azure Databricks nie cytuje ani nie oznacza w inny sposób pojedynczych kluczy lub wartości, które mogą zawierać nawiasy klamrowe, przecinki lub ->.

  • STRUCT

    Wynikiem jest rozdzielona przecinkami lista wartości pól rzutowanych, które są nawiasami klamrowymi { }. Jedna spacja następuje po każdym przecince. NULL Wartość pola jest tłumaczona na literał null.

    Usługa Azure Databricks nie oznacza ani nie oznacza w inny sposób pojedynczych wartości pól, które mogą zawierać nawiasy klamrowe lub przecinki.

  • WARIANT

    Stosowane są reguły typu rzeczywistej wartości VARIANT typu.

Przykłady

> 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 Jeśli parametr ma typ DATE i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik to NULL DATE.

  • STRUNA

    sourceExprmusi być prawidłową datąCiąg.

    Jeśli sourceExpr wartość nie jest prawidłowa dateString, usługa Azure Databricks zwraca błąd.

    Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w NULL.

  • TIMESTAMP

    Wynik jest częścią znacznika czasu daty sourceExpr.

  • TIMESTAMP_NTZ

    Wynik jest datę części timestamp_ntz sourceExpr.

  • WARIANT

    Stosowane są reguły typów dla rzeczywistej wartości przechowywanej VARIANT przez typ danych.

Przykłady

> 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 Jeśli parametr jest typem TIMESTAMP i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik to NULL DATE.

  • numeryczny

    sourceExprjest odczytywany jako liczba sekund od .1970-01-01 00:00:00 UTC

    Ułamki mniejsze niż mikrosekundy są obcinane.

    Jeśli wartość znajduje się poza zakresem TIMESTAMP, zostanie zgłoszony błąd przepełnienia.

    Użyj try_cast , aby przekształcić błędy przepełnienia w NULL.

  • STRUNA

    sourceExpr musi być prawidłowym znacznikiem czasu.

    Jeśli sourceExpr wartość nie jest prawidłowa timestampString, usługa Azure Databricks zwraca błąd.

    Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w NULL.

  • DATA

    Wynik jest w sourceExpr DATE 00:00:00godzinach.

  • TIMESTAMP_NTZ

Wynik jest wartością znacznika czasu z tym samym rokiem/miesiącem/dniem/godziną/minutą/sekundą pól timestamp_ntz sourceExpr.

  • WARIANT

    Stosowane są reguły typów dla rzeczywistej wartości przechowywanej VARIANT przez typ danych.

Przykłady

> 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 Jeśli parametr jest typem TIMESTAMP_NTZ i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik to NULL DATE.

  • STRUNA

    sourceExpr musi być prawidłowym znacznikiem czasu.

    Jeśli sourceExpr wartość nie jest prawidłowa timestampString, usługa Azure Databricks zwraca błąd.

    Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w NULL.

  • DATA

    Wynikiem jest sourceExpr DATA w 00:00:00godzinach.

  • TIMESTAMP

    Wynikiem jest czas lokalny w sourceExpr strefie czasowej sesji.

  • WARIANT

    Stosowane są reguły typów dla rzeczywistej wartości przechowywanej VARIANT przez typ danych.

Przykłady

> 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

interwał miesiąca roku

targetType Jeśli parametr jest interwałem miesiąca i sourceExpr ma typ:

Przykłady

> 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

Interwał dnia

targetType Jeśli parametr jest interwałem dnia i sourceExpr ma typ:

> 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

BOOLOWSKI

targetType Jeśli element jest wartością logiczną i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik jest typem NULL BOOLEAN.

  • numeryczny

    Jeśli sourceExpr :

  • STRUNA

    Jeśli sourcEexpr jest (bez uwzględniania wielkości liter):

    • 'T', 'TRUE', 'Y', 'YES', or '1': Wynik to true
    • 'F', 'FALSE', 'N', 'NO', or '0': Wynik to false
    • NULL: Wynik to NULL

    W przeciwnym razie usługa Azure Databricks zwraca nieprawidłową składnię danych wejściowych dla błędu logicznego typu.

    Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w NULL.

  • WARIANT

    Stosowane są reguły typu rzeczywistej wartości VARIANT typu.

Przykłady

> 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

DWÓJKOWY

targetType Jeśli element jest wartością BINARY i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik jest typem NULL BINARY.

  • STRUNA

    Wynikiem jest kodowanie UTF-8 .surceExpr

  • WARIANT

    Stosowane są reguły typów dla rzeczywistej wartości przechowywanej VARIANT przez typ danych.

Przykłady

> 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

TABLICA

targetType Jeśli element jest elementem targetElementType > tablicy < i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik jest wartością NULL .targeType

  • Typ sourceElementType tablicy <>

    Jeśli rzutowanie z sourceElementType do targetElementType jest obsługiwane, wynik jest ARRAY<targetElementType> ze wszystkimi elementami rzutowania do targetElementTypeelementu .

    Usługa Azure Databricks zgłasza błąd, jeśli rzutowanie nie jest obsługiwane lub nie można rzutować któregokolwiek z elementów.

    Użyj try_cast , aby przekształcić nieprawidłowe dane lub błędy przepełnienia na NULL.

  • WARIANT

    Stosowane są reguły typów dla rzeczywistej wartości przechowywanej VARIANT przez typ danych.

Przykłady

> 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 Jeśli element jest wartością targetKeyType MAP<, parametr targetValueType > i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik jest wartością NULL .targetType

  • <MAP sourceKeyType, sourceValueType>

    Jeśli rzutowania od do i do są obsługiwane, wynikiem jest MAP<targetKeyType, targetValueType> rzutowanie wszystkich kluczy do targetKeyType i wszystkie wartości rzutowane na targetValueType.targetValueType sourceValueType targetKeyType sourceKeyType

    Usługa Azure Databricks zgłasza błąd, jeśli rzutowanie nie jest obsługiwane lub jeśli nie można rzutować żadnego z kluczy lub wartości.

    Użyj try_cast , aby przekształcić nieprawidłowe dane lub błędy przepełnienia na NULL.

  • WARIANT

    Stosowane są reguły typów dla rzeczywistej wartości przechowywanej VARIANT przez typ danych.

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

    Każdy sourceFieldName typ STRING jest rzutowany na targetKeyType i mapowany na klucz mapy. Każda wartość pola źródłowego jest rzutowana sourceFieldType targetValueType i mapowana odpowiednią wartość mapy.

    Usługa Azure Databricks zgłasza błąd, jeśli żadne rzutowania nie są obsługiwane lub jeśli nie można rzutować żadnej z wartości pól lub wartości kluczy.

    Użyj try_cast , aby przekształcić nieprawidłowe dane lub błędy przepełnienia na NULL.

Przykłady

> 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 Jeśli element jest strukturą <[targetFieldName: targetFieldType [NOT NULL] [COMMENT str] [, ...]] > i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik jest wartością NULL .targetType

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

    Można sourceExpr rzutować na targetType wartość , jeśli wszystkie te warunki są spełnione:

    • Typ źródłowy ma taką samą liczbę pól jak docelowy
    • Dla wszystkich pól można sourceFieldTypeN rzutować element na targetFieldTypeN.
    • Dla wszystkich wartości pól: wartość pola źródłowego N można rzutować, targetFieldTypeN a wartość nie ma wartości null, jeśli pole docelowe N jest oznaczone jako NOT NULL.

    sourceFieldNames, ograniczenia źródłowe NOT NULL i źródła COMMENTnie muszą być zgodne z elementami targetType i są ignorowane.

    Usługa Azure Databricks zgłasza błąd, jeśli rzutowanie nie jest obsługiwane lub nie można rzutować któregokolwiek z pól.

    Użyj try_cast , aby przekształcić nieprawidłowe dane lub błędy przepełnienia na NULL.

  • WARIANT

    Stosowane są reguły typów dla rzeczywistej wartości przechowywanej VARIANT przez typ danych.

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

    Wszystkie sourceFieldNames są dopasowane do sourceFieldNames. Każda wartość pola źródłowego sourceFieldType jest rzutowana na dopasowaną i zamapowaną targetValueType na odpowiednią wartość mapy.

    Jeśli element targetFieldName nie jest zgodny, wartość pola to NULL.

    Jeśli element sourceFieldName nie jest zgodny, pole jest ignorowane.

    Usługa Azure Databricks zgłasza błąd, jeśli żadne rzutowania nie są obsługiwane lub jeśli nie można rzutować żadnej z wartości pól lub wartości kluczy.

    Użyj try_cast , aby przekształcić nieprawidłowe dane lub błędy przepełnienia na NULL.

Przykłady

> 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 Jeśli element jest wariantem i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik jest typem NULL VARIANT.

  • numeryczny

    Wynikiem jest VARIANT, reprezentująca wartość liczbową. Precyzja DECIMAL typów musi wynosić <= 38.

    Wszystkie liczby całkowite są mapowane na BIGINT.

    Wszystkie DECIMAL wartości są mapowane na ich najwęższą precyzję i skalę.

  • STRUNA

    Wynik to VARIANT, reprezentującą STRING wartość .

  • DATA

    Wynik to VARIANT, reprezentującą DATE wartość .

  • TIMESTAMP

    Wynik to VARIANT, reprezentującą TIMESTAMP wartość .

  • TIMESTAMP_NTZ

    Wynik to VARIANT, reprezentującą TIMESTAMP NTZ wartość .

  • BOOLOWSKI

    Wynik to VARIANT, reprezentującą BOOLEAN wartość .

  • DWÓJKOWY

    Wynik to VARIANT, reprezentującą BINARY wartość .

  • Typ sourceElementType tablicy <>

    Jeśli rzutowanie z sourceElementType do VARIANT jest obsługiwane, wynik to VARIANT, reprezentując ARRAY<sourceElementType>.

    Usługa Azure Databricks zgłasza błąd, jeśli rzutowanie nie jest obsługiwane.

    Użyj try_cast , aby przekształcić nieprawidłowe dane lub błędy przepełnienia na NULL.

Przykłady

> SELECT cast(NULL AS VARIANT);
  NULL

> SELECT cast(5.1000 AS VARIANT);
  5.1

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