cast Funkcja

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

Rzutuje wartość expr na docelowy typ typedanych .

Składni

cast(sourceExpr AS targetType)

Argumenty

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

Zwraca

Wynik jest typem targetType.

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

Źródło (wiersz) Target(column) VOID Liczbowe CIĄG DATA SYGNATURY CZASOWEJ TIMESTAMP_NTZ interwał miesiąca interwał dnia BOOLEAN BINARNYM TABLICY MAPĘ STRUCT
VOID Y Y Y Y Y Y Y Y Y Y Y Y Y
Liczbowe N Y Y N Y N Y Y Y N N N N
CIĄG N Y Y Y Y Y Y Y Y Y N N N
DATA N N Y Y Y Y N N N N N N N
SYGNATURY CZASOWEJ N Y Y Y Y Y N N N N N N N
TIMESTAMP_NTZ N N Y Y Y Y N N N N N N N
interwał miesiąca N Y Y N N N Y N N N N N N
interwał dnia N Y Y N N N N Y N N N N N
BOOLEAN N Y Y N Y N N N Y N N N N
BINARNYM N Y Y N N N N N N Y N N N
TABLICY N N Y N N N N N N N Y N N
MAPĘ N N Y N N N N N N N N Y N
STRUCT N N Y N N N N N N N N N Y

Reguły i ograniczenia oparte na typie targetType

Ostrzeżenie

W środowisku Databricks Runtime, jeśli parametr spark.sql.ansi.enabled ma falsewartość , przepełnienie nie spowoduje błędu, ale zamiast tego spowoduje "zawijanie" wyniku.

Wartość sourceExpr z nieprawidłowym formatem lub nieprawidłowymi znakami dla targetType elementu spowoduje wartość NULL.

Liczbowe

Jeśli wartość targetType jest liczbowa i sourceExpr ma typ:

  • VOID

    Wynikiem jest wartość NULL określonego typu liczbowego.

  • Liczbowe

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

    W przeciwnym razie wynik jest sourceExprzaokrą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

  • CIĄG

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

    Jeśli sourceExpr format wartości literału nie jest zgodny, 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ć przepełnienie i nieprawidłowe błędy formatu na NULL.

  • SYGNATURY CZASOWEJ

    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 Zaznaczone sql usługi Databricks oznaczone jako tak Databricks Runtime 11.2 lub nowsze

    Typ docelowy musi być dokładnym typem liczbowym.

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

  • BOOLEAN

    Jeśli sourceExpr jest:

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

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

CIĄG

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

  • VOID

    Wynik jest ciągiem o wartości NULL.

  • dokładne liczbowe

    Wynik jest liczbą 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 wartość jest DECIMAL(p, s) większa niż s 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 separatora dziesiętnego.

    W przeciwnym razie usługa Azure Databricks używa mantissa, a następnie E wykładnika. Mantissa ma opcjonalny wiodący znak minus, po którym następuje jedna cyfra po lewej stronie przecinka dziesiętnego i 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 do 9999 CE, wynikiem jest dataString formularza -YYYY-MM-DD i YYYY-MM-DD odpowiednio.

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

  • SYGNATURY CZASOWEJ

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

    Przez lata wcześniejsze lub po tym zakresie wymagana liczba cyfr jest dodawana do składnika roku 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 sygnaturą czasową formularza -YYYY-MM-DD hh:mm:ss i YYYY-MM-DD hh:mm:ss odpowiednio.

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

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

  • interwał miesiąca

    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 miesiąc-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
  • BOOLEAN

    Wynikiem wartości logicznej true jest literał trueSTRING , dla false którego jest to literał falseCIĄGU , a dla NULL niego ciąg NULL.

  • BINARNYM

    Wynikiem jest binarna sourceExpr interpretowana jako sekwencja znaków UTF-8.

    Usługa Azure Databricks nie weryfikuje znaków UTF-8. Rzutowanie od BINARY do nigdy nie będzie wstrzykiwać STRING znaków podstawienia ani zgłaszać błędu.

  • TABLICY

    Wynikiem jest rozdzielona przecinkami lista elementów rzutowanych, które są ujmowane nawiasami kwadratowymi [ ]. Po jednym miejscu następuje każdy przecinek. Element NULL jest tłumaczony na literał null.

    Usługa Azure Databricks nie oznacza cudzysłowu ani w inny sposób oznacza poszczególnych elementów, które mogą zawierać nawiasy kwadratowe lub przecinki.

  • MAPĘ

    Wynikiem jest rozdzielona przecinkami lista par wartości klucza rzutowania, która jest ujmowana nawiasami klamrowymi { }. Po jednym miejscu następuje każdy przecinek. Każda para klucz-wartość jest oddzielona wartością .-> NULL Wartość mapy jest tłumaczona na literał null.

    Usługa Azure Databricks nie oznacza cudzysłowu ani w inny sposób oznacza 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óra jest ujmowana nawiasami klamrowymi { }. Po jednym miejscu następuje każdy przecinek. NULL Wartość pola jest tłumaczona na literał null.

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

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);
  {}

DATA

Jeśli parametr targetType ma typ DATE i sourceExpr ma typ:

  • VOID

    Wynikiem jest DATA NULL.

  • CIĄG

    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

  • SYGNATURY CZASOWEJ

    Wynik jest częścią daty znacznika sourceExprczasu .

  • TIMESTAMP_NTZ

    Wynikiem jest część daty timestamp_ntz sourceExpr.

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

SYGNATURY CZASOWEJ

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

  • VOID

    Wynikiem jest DATA NULL.

  • Liczbowe

    sourceExprparametr 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

  • CIĄG

    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_NTZ

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

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

TIMESTAMP_NTZ

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

  • VOID

    Wynikiem jest DATA NULL.

  • CIĄG

    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.

  • SYGNATURY CZASOWEJ

Wynik jest lokalny czas jako sourceExpr w strefie czasowej sesji.

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

interwał miesiąca

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

  • VOID

    Wynikiem jest interwał dzienny o wartości NULL.

  • exact_numeric

    Dotyczy:zaznacz pole wyboru oznaczone jako tak Zaznaczone sql usługi Databricks oznaczone jako tak Databricks Runtime 11.2 lub nowsze

    Wartość liczbowa jest interpretowana jako liczba niższych jednostek targetTypedayTimeIntervalQualifier. Jeśli jednostka jest SECOND ułamkami, są interpretowane jako ułamkowe sekundy.

  • CIĄG

    sourceExpr musi być prawidłowym ciągiem dayTimeIntervalString.

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

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

  • interwał dnia

    targetType Jeśli dayTimeIntervalQualifier zawiera najmniejszą jednostkę typu źródłowego dayTimeIntervalQualifier, wartość pozostaje niezmieniona, ale jest ponownie interpretowana w celu dopasowania do typu docelowego.

    sourceExpr W przeciwnym razie interwał zostanie obciętytargetType, aby dopasować element .

> 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

BOOLEAN

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

  • VOID

    Wynik jest wartością logiczną NULL.

  • Liczbowe

    Jeśli sourceExpr jest:

  • CIĄG

    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

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

BINARNYM

Jeśli parametr targetType jest binarny i sourceExpr ma typ:

  • VOID

    Wynikiem jest wartość binarna o wartości NULL.

  • CIĄG

    Wynikiem jest kodowanie UTF-8 klasy surceExpr.

Przykłady

> SELECT cast(NULL AS BINARY);
  NULL

> SELECT hex(cast('Spark SQL' AS BINARY));
  537061726B2053514C

> SELECT hex(cast('Oдesa' AS BINARY));
  4FD0B4657361

TABLICY

Jeśli element targetTypejest obiektem docelowym ARRAYElementType <> i sourceExpr ma typ:

  • VOID

    Wynikiem jest wartość NULL .targeType

  • SourceElementType tablicy <>

    Jeśli rzutowanie z sourceElementType do targetElementType jest obsługiwane, wynik jest ARRAY<targetElementType> wynikiem ze wszystkimi targetElementTypeelementami rzutowania na obiekt .

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

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

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.

MAPĘ

Jeśli element targetTypejest wartością docelową MAPKeyType < , parametr targetValueType > i sourceExpr ma typ:

  • VOID

    Wynikiem jest wartość NULL .targetType

  • <MAP sourceKeyType, sourceValueType>

    Jeśli rzutowania z sourceKeyType do i sourceValueType do targetKeyTypetargetValueType są obsługiwane, wynikiem jest MAP<targetKeyType, targetValueType> rzutowanie wszystkich kluczy na targetKeyType i wszystkie wartości rzutowane 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.

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.

STRUCT

Jeśli element targetType jest strukturą <[targetFieldName: targetFieldType [NOT NULL] [COMMENT str] [, ...]] > i sourceExpr ma typ:

  • VOID

    Wynikiem jest wartość NULL .targetType

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

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

    • Typ źródłowy ma taką samą liczbę pól co docelowy
    • Dla wszystkich pól: sourceFieldTypeN można rzutować do elementu targetFieldTypeN.
    • Dla wszystkich wartości pól: wartość pola źródłowego N można rzutować na targetFieldTypeN wartość , 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 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.

Przykłady

> SELECT cast(NULL AS STRUCT<a:INT>);
  NULL

> SELECT cast(named_struct('a', 't', 'b', '1900') 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