Funkcja cast
Dotyczy: Databricks SQL Databricks Runtime
Rzutuje wartość expr
na docelowy typ type
danych . 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:
-
Wynik jest wartością 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
jest 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
. -
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: Databricks SQL 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 liczbielower_unit
. Jeśli wartośćlower_unit
toSECOND
, sekundy ułamkowe są przechowywane po prawej stronie punktu dziesiętnego. W przypadku wszystkich innych interwałów wynik jest zawsze liczbą całkowitą. -
Jeśli
sourceExpr
:true
: Wynik wynosi 0.false
: Wynik to 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 NULL.
-
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 maDECIMAL(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. -
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 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. -
Jeśli rok mieści się w przedziale od 9999 do 9999 CE, wynikiem jest odpowiednio dataString formularza
-YYYY-MM-DD
iYYYY-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. -
Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest znacznik czasu formularza
-YYYY-MM-DD hh:mm:ss
iYYYY-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. -
Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest znacznik czasu formularza
-YYYY-MM-DD hh:mm:ss
iYYYY-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. -
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
-
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
STRING, a dlaNULL
niego ciąg NULL. -
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. -
Wynikiem jest rozdzielona przecinkami lista elementów rzutowanych, które są ujmowane nawiasami kwadratowymi
[ ]
. Jedna spacja następuje po każdym przecince. ElementNULL
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.
-
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
->
. -
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:
-
Wynikiem jest DATA NULL.
-
sourceExpr
musi być prawidłową datąCiąg.Jeśli
sourceExpr
wartość nie jest prawidłowadateString
, usługa Azure Databricks zwraca błąd.Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w
NULL
. -
Wynik jest częścią znacznika czasu daty
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
TIMESTAMP
targetType
Jeśli parametr jest typem TIMESTAMP i sourceExpr
ma typ:
-
Wynikiem jest DATA NULL.
-
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
. -
sourceExpr
musi być prawidłowym znacznikiem czasu.Jeśli
sourceExpr
wartość nie jest prawidłowatimestampString
, usługa Azure Databricks 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 parametr jest typem TIMESTAMP_NTZ i sourceExpr
ma typ:
-
Wynikiem jest DATA NULL.
-
sourceExpr
musi być prawidłowym znacznikiem czasu.Jeśli
sourceExpr
wartość nie jest prawidłowatimestampString
, usługa Azure Databricks 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 roku
targetType
Jeśli parametr jest interwałem miesiąca i sourceExpr
ma typ:
-
Wynikiem jest interwał z rokiem o wartości NULL.
-
Dotyczy: Databricks SQL Databricks Runtime 11.3 LTS i nowsze
Wartość liczbowa jest interpretowana jako liczba niższych jednostek
targetType
rokumonthIntervalQualifier. -
sourceExpr
musi być prawidłowym rokiemMonthIntervalString.Jeśli
sourceExpr
wartość nie jest prawidłowayearMonthIntervalString
, usługa Azure Databricks 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 zostanie ponownie zinterpretowana, 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
targetType
Jeśli parametr jest interwałem dnia i sourceExpr
ma typ:
-
Wynikiem jest interwał dzienny o wartości NULL.
-
Dotyczy: Databricks SQL Databricks Runtime 11.3 LTS i nowsze
Wartość liczbowa jest interpretowana jako liczba niższych jednostek
targetType
dayTimeIntervalQualifier. Jeśli jednostka jestSECOND
ułamkami, są interpretowane jako ułamkowe sekundy. -
sourceExpr
musi być prawidłowym ciągiem dayTimeIntervalString.Jeśli
sourceExpr
wartość nie jest prawidłowadayTimeIntervalString
, usługa Azure Databricks zwraca błąd.Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w
NULL
. -
targetType
Jeśli dayTimeIntervalQualifier zawiera najmniejszą jednostkę typu źródłowego dayTimeIntervalQualifier, wartość pozostaje niezmieniona, ale zostanie ponownie zinterpretowana, aby dopasować typ docelowy.sourceExpr
W przeciwnym razie interwał zostanie obcięty, aby dopasowaćtargetType
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
targetType
Jeśli element jest wartością logicznąi sourceExpr
ma typ:
-
Wynik jest wartością logiczną NULL.
-
Jeśli
sourceExpr
: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
targetType
Jeśli element jest wartością BINARY 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
targetType
Jeśli element jest elementem targetElementType > tablicy < i sourceExpr
ma typ:
-
Wynikiem jest wartość NULL obiektu
targeType
. Typ sourceElementType tablicy <>
Jeśli rzutowanie z
sourceElementType
dotargetElementType
jest obsługiwane, wynik jestARRAY<targetElementType>
ze wszystkimi elementami rzutowania dotargetElementType
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
.
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:
-
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 dotargetKeyType
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 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:
-
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 natargetFieldTypeN
. - 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 jakoNOT NULL
.
sourceFieldName
s, ograniczenia źródłoweNOT 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 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