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) VOID Liczbowe CIĄG DATA TIMESTAMP TIMESTAMP_NTZ interwał miesiąca roku 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
TIMESTAMP 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 roku 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 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:

  • VOID

    Wynik jest wartością NULL określonego typu liczbowego.

  • Liczbowe

    Jeśli targetType jest liczbą całkowitą, wynik jestsourceExpr obcinany 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

    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ą.

  • BOOLEAN

    Jeśli sourceExpr :

    • true: Wynik wynosi 0.
    • false: Wynik to 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 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
  • BOOLEAN

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

  • BINARNYM

    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.

  • TABLICY

    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.

  • MAPĘ

    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.

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

DATE

targetType Jeśli parametr 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.

  • TIMESTAMP

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

  • TIMESTAMP_NTZ

    Wynik jest datę części 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

TIMESTAMP

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

  • VOID

    Wynikiem jest DATA NULL.

  • Liczbowe

    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.

  • 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

targetType Jeśli parametr 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.

  • TIMESTAMP

Wynikiem jest czas lokalny w sourceExpr 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 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

BOOLEAN

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

  • VOID

    Wynik jest wartością logiczną NULL.

  • Liczbowe

    Jeśli sourceExpr :

  • 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

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

  • VOID

    Wynik jest wartością binarną o wartości NULL.

  • CIĄG

    Wynikiem jest kodowanie UTF-8 .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

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

  • VOID

    Wynikiem jest wartość NULL obiektu 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.

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Ę

targetType Jeśli element jest wartością targetKeyType MAP<, parametr targetValueType > i sourceExpr ma typ:

  • VOID

    Wynikiem jest wartość NULL obiektu 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.targetValueTypesourceValueTypetargetKeyTypesourceKeyType

    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

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

  • VOID

    Wynikiem jest wartość NULL obiektu targetType.

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

    Wartość sourceExpr można rzutować, targetType jeśli wszystkie warunki te 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 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