cast
function (Databricks SQL)
Rzutuje wartość expr
na docelowy typ type
danych .
Składnia
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(kolumna) | VOID | Liczbowe | CIĄG | DATE | SYGNATURY CZASOWEJ | interwał miesiąca | interwał dnia | BOOLEAN | BINARNYM | TABLICY | MAPĘ | STRUCT |
---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
Liczbowe | N | Y | Y | N | Y | N | N | Y | N | N | N | N |
CIĄG | N | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N |
DATE | N | N | Y | Y | Y | N | N | N | N | N | N | N |
SYGNATURY CZASOWEJ | N | Y | Y | Y | Y | N | N | N | N | N | N | N |
interwał miesiąca | N | N | Y | N | N | Y | N | N | N | N | N | N |
interwał dnia | N | N | Y | N | N | N | Y | N | N | N | N | N |
BOOLEAN | N | Y | Y | N | Y | N | N | Y | N | N | N | N |
BINARNYM | N | Y | Y | N | N | N | N | N | Y | N | N | N |
TABLICY | N | N | Y | N | N | N | N | N | N | Y | N | N |
MAPĘ | N | N | Y | N | N | N | N | N | N | N | Y | N |
STRUCT | N | N | Y | N | N | N | N | N | N | N | N | Y |
Reguły i ograniczenia oparte na typie targetType
numeryczne
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
. -
Jeśli
sourceExpr
jest:true
: Wynik to 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
CIĄG
targetType
Jeśli jest to typ CIĄGU (databricks SQL) i sourceExpr
ma typ:
-
Wynik jest ciągiem NULL.
-
Wynikiem jest liczba literałów z opcjonalnym znakiem minus i bez zer wiodących z wyjątkiem pojedynczej cyfry po lewej stronie punktu dziesiętnego.
targetType
Jeśli wartość jestDECIMAL(p, s)
s
większa niż 0, do skalowania dodawany jest punkt dziesiętny, a końcowe zera są dodawane w górę. dane binarne zmiennoprzecinkowe
Jeśli liczba bezwzględna jest mniejsza i większa
10,000,000
lub równa0.001
, wynik jest wyrażony bez notacji naukowej z co najmniej jedną cyfrą po obu stronach punktu dziesiętnego.W przeciwnym razie usługa Databricks SQL używa mantissa, po której następuje
E
i wykładnik. Mantissa ma opcjonalny znak wiodący minus, po którym następuje jedna cyfra po lewej stronie punktu dziesiętnego i minimalna liczba cyfr większa niż zero po prawej stronie. Wykładnik ma opcjonalny znak minus wiodącego.-
Jeśli rok wynosi od 9999 do 9999 CE, wynik jest datą formularza
-YYYY-MM-DD
iYYYY-MM-DD
odpowiednio.Przez lata przed lub po tym zakresie wymagana liczba cyfr jest dodawana do składnika roku i
+
jest używana dla CE. -
Jeśli rok wynosi od 9999 do 9999 CE, wynik jest sygnaturą czasową formy
-YYYY-MM-DD hh:mm:ss
iYYYY-MM-DD hh:mm:ss
odpowiednio.Przez lata przed 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 zer wiodących.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 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
true
wartości logicznej 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.SQL usługi Databricks nie weryfikuje znaków UTF-8. Rzutowanie z
BINARY
do nigdy nie będzie wstrzykiwaćSTRING
znaków podstawianie ani zgłaszać błędu. -
Wynikiem jest rozdzielona przecinkami lista elementów rzutowanych, które są nawiasami
[ ]
kwadratowymi . Jedna spacja następuje po każdym przecince. ElementNULL
jest tłumaczony na literałnull
.Usługa Databricks SQL nie oznacza ani nie oznacza poszczególnych elementów, które mogą zawierać nawiasy lub przecinki.
-
Wynikiem jest rozdzielona przecinkami lista par wartości klucza rzutowania, która jest klamrowa z nawiasami klamrowymi
{ }
. Jedna spacja następuje po każdym przecince. Każda para wartości klucza jest oddzielona przez element->
.NULL
Wartość mapy jest tłumaczona na literałnull
.Usługa Databricks SQL nie oznacza ani nie oznacza pojedynczych kluczy ani 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 Databricks SQL nie oznacza ani nie oznacza 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(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 jest to typ DATE (databricks SQL) i sourceExpr
ma typ:
-
Wynikiem jest DATA NULL.
-
sourceExpr
musi być prawidłową datąString.Jeśli
sourceExpr
nie jest prawidłowydateString
, usługa Databricks SQL zwraca błąd.Użyj try_cast , aby przekształcić nieprawidłowe błędy danych w
NULL
. -
Wynik jest częścią znacznika czasu
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(TIMETAMP'1900-10-01 12:13:14)' AS DATE);
1900-10-01
TIMESTAMP
targetType
Jeśli jest to typ SYGNATURY CZASOWEJ (databricks SQL) 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
nie jest prawidłowytimestampString
, usługa Databricks SQL 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.
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
interwał miesiąca
Jeśli parametr targetType
jest interwałem miesiąca i sourceExpr
ma typ:
-
Wynik jest interwałem null w miesiącu.
-
sourceExpr
musi być prawidłowym rokiemMonthIntervalString.Jeśli
sourceExpr
nie jest prawidłowyyearMonthIntervalString
, usługa Databricks SQL 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(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.
-
sourceExpr
musi być prawidłowym ciągiem dayTimeIntervalString.Jeśli
sourceExpr
nie jest prawidłowydayTimeIntervalString
, usługa Databricks SQL 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
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 Databricks SQL zwraca nieprawidłową składnię wejściową 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 element targetType
jest tablicą i sourceExpr
ma typ:
-
Wynikiem jest wartość NULL .
targeType
-
Jeśli rzutowanie z
sourceElementType
dotargetElementType
jest obsługiwane, wynik jestARRAY<targetElementType>
wynikiem ze wszystkimitargetElementType
elementami rzutowania na obiekt .Usługa Databricks SQL 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
to MAPtargetKeyType<, targetValueType> i sourceExpr
ma typ:
-
Wynikiem jest wartość NULL .
targetType
MAPsourceKeyType<, sourceValueType>
Jeśli rzutowania z
sourceKeyType
do isourceValueType
dotargetKeyType
targetValueType
są obsługiwane, wynikiem jestMAP<targetKeyType, targetValueType>
rzutowanie wszystkich kluczy natargetKeyType
i wszystkie wartości rzutowane natargetValueType
.Usługa Databricks SQL zgłasza błąd, jeśli rzutowanie nie jest obsługiwane lub nie można rzutować żadnych 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:
-
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 elementutargetFieldTypeN
. - 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 jakoNOT NULL
.
sourceFieldName
s, ograniczenia źródłoweNOT NULL
i źródłaCOMMENT
nie muszą być zgodne z elementamitargetType
i są ignorowane.Usługa Databricks SQL zgłasza błąd, jeśli rzutowanie nie jest obsługiwane lub nie można rzutować żadnych 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