cast
Funkcja
Dotyczy: Databricks SQL Databricks Runtime
Rzutuje wartość expr
na docelowy typ type
danych . Ten operator jest synonimem operatora :: (znak dwukropka)
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 false
wartość , 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:
-
Wynikiem jest wartość NULL określonego typu liczbowego.
-
Jeśli
targetType
jest liczbą całkowitą, wynik jestsourceExpr
obcinany do liczby całkowitej.W przeciwnym razie wynik jest
sourceExpr
zaokrąglany do dostępnejtargetType
skali .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
-
sourceExpr
element 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
. -
Wynikiem jest liczba sekund, które upłynęły między
1970-01-01 00:00:00 UTC
isourceExpr
.Jeśli
targetType
jest liczbą całkowitą, wynik jest obcinany do liczby całkowitej.W przeciwnym razie wynik jest zaokrąglany do dostępnej
targetType
skali .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
-
Dotyczy: usługi Databricks 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łkowitejlower_unit
liczbie . Jeśli wartośćlower_unit
toSECOND
, sekundy ułamkowe są przechowywane po prawej stronie punktu dziesiętnego. W przypadku wszystkich pozostałych interwałów wynik jest zawsze liczbą całkowitą. -
Jeśli
sourceExpr
jest:true
: Wynik wynosi 0.false
: Wynik wynosi 1.NULL
: Wynik toNULL
.
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:
-
Wynik jest ciągiem o wartości NULL.
-
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ść jestDECIMAL(p, s)
większa niżs
0, dodawany jest punkt dziesiętny, a końcowe zera są dodawane w górę w celu skalowania. -
Jeśli liczba bezwzględna jest mniejsza i
10,000,000
większa lub równa0.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. -
Jeśli rok mieści się w przedziale od 9999 do 9999 CE, wynikiem jest dataString formularza
-YYYY-MM-DD
iYYYY-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. -
Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest sygnaturą czasową formularza
-YYYY-MM-DD hh:mm:ss
iYYYY-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. -
Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest sygnaturą czasową formularza
-YYYY-MM-DD hh:mm:ss
iYYYY-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. -
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
-
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
-
Wynikiem wartości logicznej
true
jest literałtrue
STRING , dlafalse
którego jest to literałfalse
CIĄGU , a dlaNULL
niego ciąg NULL. -
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. -
Wynikiem jest rozdzielona przecinkami lista elementów rzutowanych, które są ujmowane nawiasami kwadratowymi
[ ]
. Po jednym miejscu następuje każdy przecinek. ElementNULL
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.
-
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
->
. -
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
targetType
Jeśli jest to typ DATE i sourceExpr
ma typ:
-
Wynikiem jest DATA NULL.
-
sourceExpr
musi być prawidłową datąString.Jeśli
sourceExpr
usługa Azure Databricks nie jest prawidłowadateString
, zwraca błąd.Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w
NULL
. -
Wynik jest częścią znacznika czasu
sourceExpr
. -
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
SYGNATURY CZASOWEJ
targetType
Jeśli parametr jest typem SYGNATURY CZASOWEJ i sourceExpr
ma typ:
-
Wynikiem jest DATA NULL.
-
sourceExpr
jest odczytywana jako liczba sekund od1970-01-01 00:00:00 UTC
.Ułamki mniejsze niż mikrosekundy są obcięte.
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
. -
sourceExpr
musi być prawidłowym znacznikiem czasu.Jeśli
sourceExpr
usługa Azure Databricks nie jest prawidłowatimestampString
, zwraca błąd.Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w
NULL
. -
Wynikiem jest
sourceExpr
DATA w00:00:00
godzinach.
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 jest to typ TIMESTAMP_NTZ i sourceExpr
ma typ:
-
Wynikiem jest DATA NULL.
-
sourceExpr
musi być prawidłowym znacznikiem czasu.Jeśli
sourceExpr
usługa Azure Databricks nie jest prawidłowatimestampString
, zwraca błąd.Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w
NULL
. -
Wynikiem jest
sourceExpr
DATA w00:00:00
godzinach.
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
Jeśli parametr targetType
jest interwałem miesiąca i sourceExpr
ma typ:
-
Wynik jest interwałem null w miesiącu.
-
Dotyczy: Databricks SQL Databricks Runtime 11.2 lub nowsze
Liczba jest interpretowana jako liczba niższych jednostek
targetType
rokumonthIntervalQualifier. -
sourceExpr
musi być prawidłowym rokiemMonthIntervalString.Jeśli
sourceExpr
usługa Azure Databricks nie jest prawidłowayearMonthIntervalString
, zwraca błąd.Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w
NULL
. -
targetType
Jeśli rokMonthIntervalQualifier zawieraMONTH
wartość pozostaje niezmieniona, ale jest ponownie interpretowana, aby dopasować typ docelowy.W przeciwnym razie, jeśli typ źródła yearMonthIntervalQualifier zawiera
MONTH
, wynik zostanie obcięty do pełnych lat.
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
Jeśli parametr targetType
jest interwałem dnia i sourceExpr
ma typ:
-
Wynik jest interwałem dnia o wartości NULL.
-
Dotyczy: Databricks SQL Databricks Runtime 11.2 lub nowsze
Liczba jest interpretowana jako liczba niższych jednostek
targetType
dayTimeIntervalQualifier. Jeśli jednostka jestSECOND
każdą ułamkami, jest interpretowana jako ułamkowe sekundy. -
sourceExpr
musi być prawidłowym ciągiem dayTimeIntervalString.Jeśli
sourceExpr
usługa Azure Databricks nie jest prawidłowadayTimeIntervalString
, zwraca błąd.Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w
NULL
. -
Jeśli dayTimeIntervalQualifier
targetType
zawiera najmniejszą jednostkę typu źródłowego dayTimeIntervalQualifier, wartość pozostaje niezmieniona, ale jest ponownie interpretowana, aby dopasować typ docelowy.sourceExpr
W przeciwnym razie interwał jest obcięty w celu dopasowania do elementutargetType
.
> 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 element targetType
jest wartością logiczną i sourceExpr
ma typ:
-
Wynikiem jest wartość logiczna NULL.
-
Jeśli
sourceExpr
jest:0
: Wynik tofalse
.NULL
: Wynik toNULL
.special floating point value
: Wynik totrue
.
W przeciwnym razie wynik to
true
.
-
Jeśli
sourcEexpr
jest (bez uwzględniania wielkości liter):'T', 'TRUE', 'Y', 'YES', or '1'
: Wynik totrue
'F', 'FALSE', 'N', 'NO', or '0'
: Wynik tofalse
NULL
: Wynik toNULL
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 element targetType
jest plikiem BINARNYm i sourceExpr
ma typ:
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 parametr targetType
jest elementem targetElementType >tablicy < i sourceExpr
ma typ:
-
Wynikiem jest wartość NULL .
targeType
Typ sourceElementType tablicy <>
Jeśli rzutowanie z
sourceElementType
elementu dotargetElementType
jest obsługiwane, wynikiem jest rzutowanieARRAY<targetElementType>
wszystkich elementów natargetElementType
obiekt .Usługa Azure Databricks zgłasza błąd, jeśli rzutowanie nie jest obsługiwane lub 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 parametr targetType
jest wartością targetKeyType MAP < , targetValueType > i sourceExpr
ma typ:
-
Wynikiem jest wartość NULL .
targetType
<MAP sourceKeyType, sourceValueType>
Jeśli rzutowania od do i do są obsługiwane, wynikiem jest
MAP<targetKeyType, targetValueType>
rzutowanie wszystkich kluczy natargetKeyType
i wszystkie wartości rzutowane natargetValueType
.targetValueType
sourceValueType
targetKeyType
sourceKeyType
Usługa Azure Databricks zgłasza błąd, jeśli rzutowanie nie jest obsługiwane lub 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:
-
Wynikiem jest wartość NULL .
targetType
< Struktura [sourceFieldName: sourceFieldType [NOT NULL] [COMMENT str] [, ...]]>
sourceExpr
Element można rzutować,targetType
jeśli wszystkie warunki te są spełnione:- Typ źródła ma taką samą liczbę pól jak docelowy
- Dla wszystkich pól:
sourceFieldTypeN
można rzutować do elementutargetFieldTypeN
. - Dla wszystkich wartości pól: wartość pola źródłowego N można rzutować na
targetFieldTypeN
, a wartość nie ma wartości null, jeśli pole docelowe N jest oznaczone jakoNOT NULL
.
sourceFieldName
s, ograniczenia źródłaNOT NULL
i źródłaCOMMENT
nie muszą być zgodne z elementamitargetType
i są ignorowane.Usługa Azure Databricks zgłasza błąd, jeśli rzutowanie nie jest obsługiwane lub 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