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 danych type. Ten operator jest synonimem 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) Cel (kolumna) NIEWAŻNY numeryczny STRUNA DATA ZNACZNIK CZASOWY TIMESTAMP_NTZ interwał miesiąca roku Interwał dnia BOOLOWSKI DWÓJKOWY TABLICA MAPA STRUKTURA WARIANT OBIEKT
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
ZNACZNIK CZASOWY 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
STRUKTURA 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
OBIEKT 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.

numeryczny

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

  • NIEWAŻNY

    Wynik to określony typ liczbowy NULL.

  • numeryczny

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

    W przeciwnym razie wynik jest sourceExprzaokrąglony, aby pasować 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

    sourceExpr jest odczytywany jako wartość literału targetType.

    Jeśli sourceExpr nie jest zgodny z formatem wartości literału, 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.

  • ZNACZNIK CZASU

    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, aby dopasować się do dostępnej skali targetType.

    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ładnym typem liczbowym.

    Biorąc pod uwagę 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

    Obowiązują reguły dotyczące rzeczywistej wartości typu VARIANT.

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

Jeśli sourceExpr jest STRING, to wynikowy STRING dziedziczy sortowanie sourceExpr. We wszystkich innych przypadkach sortowanie wynikowego STRING jest domyślnym sortowaniem .

Aby zmienić sortowanie, dodaj wyrażenie collate.

targetType Jeśli targetType jest typu sourceExpr i ma typ:

  • NIEWAŻNY

    Wynikiem jest ciąg NULL .

  • dokładna liczba

    Wynikiem jest liczba w postaci literału, z opcjonalnym znakiem minus i bez zer wiodących, z wyjątkiem sytuacji, gdy pojedyncza cyfra znajduje się na lewo od przecinka. 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 niż 10,000,000 i większa lub równa 0.001, wynik jest wyrażony bez notacji naukowej z co najmniej jedną cyfrą po jednej stronie przecinka dziesiętnego.

    W przeciwnym razie usługa Azure Databricks używa mantysy, po której znajduje się E oraz 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 opcjonalny wiodący znak minus.

  • DATA

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

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

  • ZNACZNIK CZASU

    Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest w formie -YYYY-MM-DD hh:mm:ssYYYY-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ą ułamkowe sekundy .f....

  • TIMESTAMP_NTZ

    Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest w formie -YYYY-MM-DD hh:mm:ssYYYY-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ą ułamkowe sekundy .f....

  • interwał miesiąca roku

    Rezultatem jest najkrótsze przedstawienie 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

    Rezultatem jest najkrótsze przedstawienie 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 trueSTRING jest literał true. W przypadku false jest to literał STRING false. 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 STRING nigdy nie będzie wstrzykiwać znaków podstawienia ani nie zgłosi błędu.

  • TABLICA

    Wynikiem jest lista elementów obsady, rozdzielona przecinkami, która jest ujęta w nawiasy kwadratowe [ ]. Po każdym przecinku następuje jedna spacja. Element NULL zostaje przetłumaczony jako dosłowny 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 lista par klucz-wartość rozdzielonych przecinkami, która jest ujęta w nawiasy klamrowe { }. Po każdym przecinku następuje jedna spacja. Każda para wartości klucza jest oddzielona wartością ->. Wartość NULL 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 same mogą zawierać nawiasy klamrowe, przecinki lub ->.

  • Struktura

    Wynikiem jest lista wartości pól oddzielonych przecinkami, umieszczonych w nawiasach klamrowych { }. Po każdym przecinku następuje jedna spacja. Wartość pola NULL jest tłumaczona na literał null.

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

  • WARIANT

    Obowiązują reguły dotyczące rzeczywistej wartości typu VARIANT.

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

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

DATA

targetType Jeśli targetType jest typu sourceExpr i ma typ:

  • NIEWAŻNY

    Wynik to NULLDATE.

  • STRUNA

    sourceExprmusi być prawidłowym dateString.

    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.

  • ZNACZNIK CZASU

    Wynik to część daty ze znacznika czasu sourceExpr.

  • TIMESTAMP_NTZ

    Wynikiem jest część datowa znacznika czasu timestamp_ntz sourceExpr.

  • WARIANT

    Reguły typów mają zastosowanie do rzeczywistej wartości przechowywanej przez typ danych VARIANT.

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

SYGNATURA CZASOWA

targetType Jeśli targetType jest typu sourceExpr i ma typ:

  • NIEWAŻNY

    Wynik to NULLDATE.

  • numeryczny

    sourceExpr jest 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 o godzinie sourceExprDATE00:00:00.

  • TIMESTAMP_NTZ

Wynik to wartość znacznika czasu, który ma te same pola roku/miesiąca/dnia/godziny/minuty/sekundy co timestamp_ntz sourceExpr.

  • WARIANT

    Reguły typów mają zastosowanie do rzeczywistej wartości przechowywanej przez typ danych VARIANT.

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

Znacznik czasu_NTZ

targetType Jeśli targetType jest typu sourceExpr i ma typ:

  • NIEWAŻNY

    Wynik to NULLDATE.

  • 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

    Rezultatem jest sourceExpr DATA o 00:00:00 godzinie.

  • ZNACZNIK CZASU

    Wynikiem jest czas lokalny w sourceExpr strefie czasowej sesji.

  • WARIANT

    Reguły typów mają zastosowanie do rzeczywistej wartości przechowywanej przez typ danych VARIANT.

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

przedział rok-miesiąc

Jeśli targetType jest interwałem rok-miesiąc 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ł czasowy dnia

targetType Jeśli parametr jest interwałem czasu 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

Jeśli targetType jest typu BOOLEAN i sourceExpr ma typ:

  • NIEWAŻNY

    Wynik jest typem NULLBOOLEAN.

  • numeryczny

    Jeśli sourceExpr :

  • STRUNA

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

    • 'T', 'TRUE', 'Y', 'YES', or '1': Wynik to jest true
    • 'F', 'FALSE', 'N', 'NO', or '0': Wynik to jest false
    • NULL: Wynik to jest 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

    Obowiązują reguły dotyczące rzeczywistej wartości typu VARIANT.

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 typu BINARY i sourceExpr jest typu:

  • NIEWAŻNY

    Wynik jest typem NULLBINARY.

  • STRUNA

    Wynikiem jest kodowanie UTF-8 surceExpr.

  • WARIANT

    Reguły typów mają zastosowanie do rzeczywistej wartości przechowywanej przez typ danych VARIANT.

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

Jeśli targetType jest ARRAY < docelowegoTypuElementu > i sourceExpr jest typu:

  • NIEWAŻNY

    Wynik jest NULL z targeType.

  • Tablica < typ elementu >

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

    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

    Reguły typów mają zastosowanie do rzeczywistej wartości przechowywanej przez typ danych VARIANT.

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 NULL z targetType.

  • <MAP sourceKeyType, sourceValueType>

    Jeśli rzutowania z sourceKeyType do targetKeyType i sourceValueType do targetValueType są obsługiwane, wynikiem jest MAP<targetKeyType, targetValueType> ze wszystkimi kluczami rzutowanymi na targetKeyType i wszystkimi wartościami rzutowanymi na targetValueType.

    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

    Reguły typów mają zastosowanie do rzeczywistej wartości przechowywanej przez typ danych VARIANT.

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

    Każdy sourceFieldName typu STRING jest rzutowany do targetKeyType i mapowany na klucz mapy. Każda wartość pola źródłowego sourceFieldType jest rzutowana targetValueType i mapowana na 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}

STRUKTURA

Jeśli targetType jest strukturą typu < i > ma typ:

  • NIEWAŻNY

    Wynik jest NULL z targetType.

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

    sourceExpr można rzutować na targetType, jeśli wszystkie te warunki są spełnione.

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

    sourceFieldName-y, źródła ograniczeń 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

    Reguły typów mają zastosowanie do rzeczywistej wartości przechowywanej przez typ danych VARIANT.

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

    Wszystkie sourceFieldName są dopasowane do sourceFieldName. Każda wartość pola źródłowego sourceFieldType jest rzutowana na dopasowane pole mapy targetValueType i przypisywana do odpowiedniej wartości 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"}

WARIANT

Jeśli targetType jest WARIANTEM i sourceExpr jest typu:

  • NIEWAŻNY

    Wynik jest typem NULLVARIANT.

  • numeryczny

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

    Wszystkie liczby całkowite są mapowane na BIGINT.

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

  • STRUNA

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

  • DATA

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

  • ZNACZNIK CZASU

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

  • TIMESTAMP_NTZ

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

  • BOOLOWSKI

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

  • DWÓJKOWY

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

  • Tablica < typ elementu >

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

    Usługa Azure Databricks generuje błąd w przypadku, gdy rzutowanie nie jest wspierane.

    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