Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja
Dotyczy: Databricks SQL
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:
-
Wynik to określony typ liczbowy
NULL
. -
Jeśli
targetType
jest liczbą całkowitą, wynik jestsourceExpr
obcinany do liczby całkowitej.W przeciwnym razie wynik jest
sourceExpr
zaokrąglony, aby pasować 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łutargetType
.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
. -
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, 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
. -
Dotyczy:
Databricks SQL
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 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 to 1. -
false
: Wynik wynosi 0. -
NULL
: Wynik toNULL
.
-
-
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:
-
Wynikiem jest ciąg
NULL
. -
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 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 niż
10,000,000
i większa lub równa0.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. -
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
iYYYY-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. -
Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest w formie
-YYYY-MM-DD hh:mm:ss
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ą ułamkowe sekundy
.f...
. -
Jeśli rok wynosi między 9999 BCE a 9999 CE, wynik jest w formie
-YYYY-MM-DD hh:mm:ss
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ą ułamkowe sekundy
.f...
. -
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
-
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
-
Wynikiem wartości logicznej
true
STRING
jest literałtrue
. W przypadkufalse
jest to literał STRINGfalse
. W tym przypadkuNULL
jest to ciąg o wartości 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
doSTRING
nigdy nie będzie wstrzykiwać znaków podstawienia ani nie zgłosi błędu. -
Wynikiem jest lista elementów obsady, rozdzielona przecinkami, która jest ujęta w nawiasy kwadratowe
[ ]
. Po każdym przecinku następuje jedna spacja. ElementNULL
zostaje przetłumaczony jako dosłownynull
.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 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
->
. -
Wynikiem jest lista wartości pól oddzielonych przecinkami, umieszczonych w nawiasach klamrowych
{ }
. Po każdym przecinku następuje jedna spacja. Wartość polaNULL
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.
-
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:
-
Wynik to
NULL
DATE
. -
sourceExpr
musi być prawidłowym dateString.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 to część daty ze znacznika czasu
sourceExpr
. -
Wynikiem jest część datowa znacznika czasu timestamp_ntz
sourceExpr
. -
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:
-
Wynik to
NULL
DATE
. -
sourceExpr
jest odczytywany jako liczba sekund od1970-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
. -
Wynik jest o godzinie
sourceExpr
DATE
00:00:00
.
Wynik to wartość znacznika czasu, który ma te same pola roku/miesiąca/dnia/godziny/minuty/sekundy co timestamp_ntz sourceExpr
.
-
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:
-
Wynik to
NULL
DATE
. -
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
. -
Rezultatem jest
sourceExpr
DATA o00:00:00
godzinie. -
Wynikiem jest czas lokalny w
sourceExpr
strefie czasowej sesji. -
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:
-
Wynik jest przedziałem czasowym
NULL
rok-miesiąc. -
Dotyczy:
Databricks SQL
Databricks Runtime 11.3 LTS i nowsze
Wartość liczbowa jest interpretowana jako liczba niższych jednostek interwału "
targetType
yearmonthIntervalQualifier". -
sourceExpr
musi być prawidłowym yearMonthIntervalString.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 yearMonthIntervalQualifier zawieraMONTH
wartość, pozostaje niezmieniona, ale jest ponownie interpretowana, aby dopasować typ docelowy.W przeciwnym razie, jeśli typ yearMonthIntervalQualifier zawiera
MONTH
, wynik zostanie zaokrąglony 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ł czasowy dnia
targetType
Jeśli parametr jest interwałem czasu dnia i sourceExpr
ma typ:
-
Wynik jest interwałem czasowym dnia
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 wynosiSECOND
, to wszelkie ułamki 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.W przeciwnym razie
sourceExpr
interwał zostanie obcięty, aby dopasowaćtargetType
.
> 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:
-
Wynik jest typem
NULL
BOOLEAN
. -
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 to jesttrue
-
'F', 'FALSE', 'N', 'NO', or '0'
: Wynik to jestfalse
-
NULL
: Wynik to jestNULL
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
. -
-
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:
-
Wynik jest typem
NULL
BINARY
. -
Wynikiem jest kodowanie UTF-8
surceExpr
. -
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:
-
Wynik jest
NULL
ztargeType
. -
Jeśli rzutowanie z
sourceElementType
dotargetElementType
jest obsługiwane, wynik jestARRAY<targetElementType>
ze wszystkimi elementami rzutowanymi 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
. -
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:
-
Wynik jest
NULL
ztargetType
. <MAP sourceKeyType, sourceValueType>
Jeśli rzutowania z
sourceKeyType
dotargetKeyType
isourceValueType
dotargetValueType
są obsługiwane, wynikiem jestMAP<targetKeyType, targetValueType>
ze wszystkimi kluczami rzutowanymi natargetKeyType
i wszystkimi wartościami rzutowanymi natargetValueType
.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
.-
Reguły typów mają zastosowanie do rzeczywistej wartości przechowywanej przez typ danych
VARIANT
. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Każdy
sourceFieldName
typuSTRING
jest rzutowany dotargetKeyType
i mapowany na klucz mapy. Każda wartość pola źródłowegosourceFieldType
jest rzutowanatargetValueType
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:
-
Wynik jest
NULL
ztargetType
. STRUCT < [sourceFieldName: sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
sourceExpr
można rzutować natargetType
, 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ć natargetFieldTypeN
. - 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 jakoNOT NULL
.
sourceFieldName
-y, źródła ograniczeńNOT 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ć któregokolwiek z pól.
Użyj try_cast , aby przekształcić nieprawidłowe dane lub błędy przepełnienia na
NULL
.-
Reguły typów mają zastosowanie do rzeczywistej wartości przechowywanej przez typ danych
VARIANT
. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Wszystkie
sourceFieldName
są dopasowane dosourceFieldName
. Każda wartość pola źródłowegosourceFieldType
jest rzutowana na dopasowane pole mapytargetValueType
i przypisywana do odpowiedniej wartości mapy.Jeśli element
targetFieldName
nie jest zgodny, wartość pola toNULL
.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:
-
Wynik jest typem
NULL
VARIANT
. -
Wynikiem jest
VARIANT
, reprezentująca wartość liczbową. PrecyzjaDECIMAL
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ę. -
Wynik to
VARIANT
, reprezentująca wartośćSTRING
. -
Wynik to
VARIANT
, reprezentująca wartośćDATE
. -
Wynik to
VARIANT
, reprezentująca wartośćTIMESTAMP
. -
Wynik to
VARIANT
, reprezentująca wartośćTIMESTAMP NTZ
. -
Wynik to
VARIANT
, reprezentująca wartośćBOOLEAN
. -
Wynik to
VARIANT
, reprezentująca wartośćBINARY
. -
Jeśli rzutowanie z
sourceElementType
doVARIANT
jest obsługiwane, wynik toVARIANT
, reprezentującARRAY<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