Funkce cast
Platí pro: Databricks SQL Databricks Runtime
Přetypuje hodnotu expr
na cílový datový typ type
. Tento operátor je synonymem pro :: (dvojtečka znaménko)
Syntaxe
cast(sourceExpr AS targetType)
Argumenty
sourceExpr
: Libovolný přetypovatelný výraz.targetType
: Datový typ výsledku.
Návraty
Výsledek je typ targetType
.
Platné jsou následující kombinace přetypování datových typů:
Zdroj (řádek) Target(column) | PRÁZDNOTA | číselný | ŘETĚZEC | DATE (Datum) | ČASOVÉ RAZÍTKO | TIMESTAMP_NTZ | interval mezi rokem | denní interval | BOOLEOVSKÝ | BINÁRNÍ | POLE | MAPA | STRUCT | VARIANTA | OBJEKT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRÁZDNOTA | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
číselný | N | Y | Y | N | Y | N | Y | Y | Y | N | N | N | N | Y | N |
ŘETĚZEC | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | Y | N |
DATE (Datum) | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
ČASOVÉ RAZÍTKO | 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 |
interval mezi rokem | N | Y | Y | N | N | N | Y | N | N | N | N | N | N | N | N |
denní interval | N | Y | Y | N | N | N | N | Y | N | N | N | N | N | N | N |
BOOLEOVSKÝ | N | Y | Y | N | Y | N | N | N | Y | N | N | N | N | Y | N |
BINÁRNÍ | N | Y | Y | N | N | N | N | N | N | Y | N | N | N | Y | N |
POLE | 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 |
STRUCT | N | N | Y | N | N | N | N | N | N | N | N | N | Y | N | N |
VARIANTA | N | Y | Y | Y | Y | Y | N | N | Y | Y | Y | Y | Y | Y | N |
OBJEKT | N | N | N | N | N | N | N | N | N | N | N | Y | Y | N | N |
Pravidla a omezení založená na typu targetType
Upozorňující
Pokud je false
ve službě Databricks Runtime spark.sql.ansi.enabled , přetečení nezpůsobí chybu, ale místo toho výsledek zabalí.
Výsledkem sourceExpr
hodnoty s neplatným formátem nebo neplatnými znaky bude targetType
znak .NULL
numerické
targetType
Pokud je číslo a sourceExpr
je typu:
-
Výsledkem je
NULL
zadaný číselný typ. -
Pokud
targetType
je celočíselný číselný, výsledek sesourceExpr
zkrátí na celé číslo.V opačném případě se
sourceExpr
výsledek zaokrouhlí na dostupné měřítkotargetType
.Pokud je hodnota mimo rozsah
targetType
, vyvolá se chyba přetečení.Pomocí try_cast přetečení přetečení přetékejte na
NULL
. -
sourceExpr
je přečteno jako literálovátargetType
hodnota .Pokud
sourceExpr
nevyhovuje formátu hodnot literálů, vyvolá se chyba.Pokud je hodnota mimo rozsah
targetType
, vyvolá se chyba přetečení.Pomocí try_cast přetečení přetečení a neplatných chyb formátu převést na
NULL
. -
Výsledkem je počet sekund uplynulých mezi
1970-01-01 00:00:00 UTC
asourceExpr
.Pokud
targetType
je celočíselný číselný, výsledek se zkrátí na celé číslo.V opačném případě se výsledek zaokrouhlí na dostupné měřítko
targetType
.Pokud je výsledek mimo rozsah
targetType
, vyvolá se chyba přetečení.Pomocí try_cast přetečení přetečení přetékejte na
NULL
. -
Platí pro: Databricks SQL Databricks Runtime 11.3 LTS a vyšší
Cílový typ musí být přesný číselný.
INTERVAL upper_unit TO lower_unit
Vzhledem k tomu, že výsledek se měří v celkovém počtulower_unit
. Pokud je hodnotalower_unit
SECOND
, desetinné sekundy jsou uloženy vpravo od desetinné čárky. Ve všech ostatních intervalech je výsledkem vždy celočíselné číslo. -
Pokud
sourceExpr
je:true
: Výsledek je 1.false
: Výsledek je 0.NULL
: Výsledek jeNULL
.
-
Pravidla typu skutečné hodnoty
VARIANT
typu platí.
Příklady
> 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
STRING
targetType
Pokud je typ STRING a sourceExpr
je typu:
-
Výsledkem je
NULL
řetězec. -
Výsledkem je číslo literálu s nepovinným znaménkem minus a bez počátečních nul s výjimkou jedné číslice vlevo od desetinné čárky. Pokud je hodnota
targetType
DECIMAL(p, s)
s
větší 0, přidá se desetinná čárka a koncové nuly se přidají do měřítka. binární číslo s plovoucí desetinou čárkou
Pokud je absolutní číslo menší
10,000,000
a větší nebo rovno0.001
, výsledek se vyjadřuje bez vědeckého zápisu s alespoň jednou číslicí na obou stranách desetinné čárky.V opačném případě Azure Databricks používá mantisu následovanou
E
a exponent. Mantisa má volitelný úvodní znaménko minus následované jednou číslicí vlevo od desetinné čárky a minimální počet číslic větších než nula vpravo. Exponent má a volitelné počáteční znaménko minus.DATE (Datum)
Pokud je rok mezi 9999 BCE a 9999 CE, výsledek je dateString formuláře
-YYYY-MM-DD
aYYYY-MM-DD
v uvedeném pořadí.Pro roky předcházející nebo po tomto rozsahu se do složky roků přičtou nezbytné číslice a
+
použijí se pro CE.-
Pokud je rok mezi 9999 BCE a 9999 CE, výsledkem je časové razítko formuláře
-YYYY-MM-DD hh:mm:ss
aYYYY-MM-DD hh:mm:ss
v uvedeném pořadí.Pro roky předcházející nebo po tomto rozsahu se do složky roků přičtou nezbytné číslice a
+
použijí se pro CE.Zlomkové sekundy
.f...
se v případě potřeby přidají. -
Pokud je rok mezi 9999 BCE a 9999 CE, výsledkem je časové razítko formuláře
-YYYY-MM-DD hh:mm:ss
aYYYY-MM-DD hh:mm:ss
v uvedeném pořadí.Pro roky předcházející nebo po tomto rozsahu se do složky roků přičtou nezbytné číslice a
+
použijí se pro CE.Zlomkové sekundy
.f...
se v případě potřeby přidají. -
Výsledkem je její nejkratší reprezentace literálu intervalu. Pokud je interval záporný, je znaménko vloženo do znaku
interval-string
. U jednotek menších než 10 jsou úvodní nuly vynechány.Typický řetězec intervalu roku má tvar:
INTERVAL 'Y' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
-
Výsledkem je její nejkratší reprezentace literálu intervalu. Pokud je interval záporný, je znaménko vloženo do znaku
interval-string
. U jednotek menších než 10 se vynechá počáteční nuly.Typický řetězec denního časového intervalu má tvar:
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
-
Výsledkem logické hodnoty
true
jeSTRING
literáltrue
. Profalse
to je literálfalse
STRING . JednáNULL
se o řetězec NULL. -
Výsledkem je binární
sourceExpr
interpretovaná jako sekvence znaků UTF-8.Azure Databricks neověřuje znaky UTF-8. Přetypování na
BINARY
STRING
nikdy nevkáže náhradní znaky nebo vyvolá chybu. -
Výsledkem je čárkami oddělený seznam prvků přetypování, který je složený závorkami
[ ]
. Jedna mezera následuje za každou čárkou. PrvekNULL
je přeložen do literálunull
.Azure Databricks neuvozuje ani jinak neoznačí jednotlivé prvky, které můžou obsahovat závorky nebo čárky.
-
Výsledkem je čárkami oddělený seznam dvojic klíčových hodnot přetypování, který je složený ze složených závorek
{ }
. Jedna mezera následuje za každou čárkou. Každý pár hodnot klíče je oddělený->
hodnotou . HodnotaNULL
mapy je přeložena do literálunull
.Azure Databricks neuvozuje nebo jinak označuje jednotlivé klíče nebo hodnoty, které mohou samy o sobě obsahovat složené závorky, čárky nebo
->
. -
Výsledkem je čárkami oddělený seznam hodnot pole přetypování, který je složený s složenými složenými závorkami
{ }
. Jedna mezera následuje za každou čárkou. HodnotaNULL
pole je přeložena do literálunull
.Azure Databricks neuvozuje nebo jinak neoznačí jednotlivé hodnoty polí, které můžou samy o sobě obsahovat složené závorky nebo čárky.
-
Pravidla typu skutečné hodnoty
VARIANT
typu platí.
Příklady
> 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
DATE
targetType
Pokud je typ DATE a sourceExpr
je typu:
-
Výsledkem je
NULL
DATE
. -
sourceExpr
musí být platným dateStringem.Pokud
sourceExpr
není platnádateString
, Azure Databricks vrátí chybu.Pomocí try_cast můžete převést neplatné chyby dat na
NULL
. -
Výsledek je část časového razítka
sourceExpr
. -
Výsledek je datová část timestamp_ntz
sourceExpr
. -
Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem
VARIANT
.
Příklady
> 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
ČASOVÉ RAZÍTKO
targetType
Pokud se jedná o typ TIMESTAMP a sourceExpr
je typu:
-
Výsledkem je
NULL
DATE
. -
sourceExpr
je přečteno jako počet sekund od1970-01-01 00:00:00 UTC
.Zlomky menší než mikrosekundy jsou zkráceny.
Pokud je hodnota mimo rozsah
TIMESTAMP
, vyvolá se chyba přetečení.Pomocí try_cast přetečení přetečení přetékejte na
NULL
. -
sourceExpr
musí být platný timestampString.Pokud
sourceExpr
není platnátimestampString
, Azure Databricks vrátí chybu.Pomocí try_cast můžete převést neplatné chyby dat na
NULL
. DATE (Datum)
Výsledkem je
sourceExpr
DATE
00:00:00
hodina.
Výsledkem je hodnota časového razítka se stejným polem roku, měsíce, dne, hodiny, minuty a sekundy timestamp_ntz sourceExpr
.
-
Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem
VARIANT
.
Příklady
> 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
TIMESTAMP_NTZ
Pokud se jedná targetType
o typ TIMESTAMP_NTZ a sourceExpr
je typu:
-
Výsledkem je
NULL
DATE
. -
sourceExpr
musí být platný timestampString.Pokud
sourceExpr
není platnátimestampString
, Azure Databricks vrátí chybu.Pomocí try_cast můžete převést neplatné chyby dat na
NULL
. DATE (Datum)
Výsledkem je
sourceExpr
DATUM v00:00:00
hodinách.-
Výsledek je místní čas jako v časovém pásmu
sourceExpr
relace. -
Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem
VARIANT
.
Příklady
> 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
interval mezi rokem
targetType
Pokud je interval rok-měsíc a sourceExpr
je typu:
-
Výsledkem je interval ročního
NULL
měsíce. -
Platí pro: Databricks SQL Databricks Runtime 11.3 LTS a vyšší
Číselný argument je interpretován jako počet nižších jednotek
targetType
rokuintervalQualifier. -
sourceExpr
musí být platný rokMonthIntervalString.Pokud
sourceExpr
není platnáyearMonthIntervalString
, Azure Databricks vrátí chybu.Pomocí try_cast můžete převést neplatné chyby dat na
NULL
. -
targetType
Pokud rokMonthIntervalQualifier obsahujeMONTH
hodnotu zůstane beze změny, ale je reinterpretována tak, aby odpovídala cílovému typu.V opačném případě, pokud typ zdroje yearMonthIntervalQualifier obsahuje
MONTH
, výsledek se zkrátí na celé roky.
Příklady
> 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
denní interval
Pokud se jedná targetType
o denní interval a sourceExpr
je typu:
-
Výsledkem je
NULL
denní interval. -
Platí pro: Databricks SQL Databricks Runtime 11.3 LTS a vyšší
Číselná hodnota se interpretuje jako počet nižších jednotek
targetType
dayTimeIntervalQualifier. Pokud jeSECOND
jednotkou nějaké zlomky, interpretují se jako zlomkové sekundy. -
sourceExpr
musí být platný dayTimeIntervalString.Pokud
sourceExpr
není platnádayTimeIntervalString
, Azure Databricks vrátí chybu.Pomocí try_cast můžete převést neplatné chyby dat na
NULL
. -
targetType
Pokud dayTimeIntervalQualifier obsahuje nejmenší jednotku zdrojového typu dayTimeIntervalQualifier, hodnota zůstane beze změny, ale bude interpretována tak, aby odpovídala cílovému typu.V opačném případě je
sourceExpr
interval zkrácen tak, aby odpovídaltargetType
.
> 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
BOOLEOVSKÝ
Pokud se jedná targetType
o logickou hodnotu a sourceExpr
je typu:
-
Výsledek je
NULL
typuBOOLEAN
. -
Pokud
sourceExpr
je:0
: Výsledek jefalse
.NULL
: Výsledek jeNULL
.special floating point value
: Výsledek jetrue
.
V opačném případě je
true
výsledek .
-
Pokud
sourcEexpr
je (nerozlišuje malá a velká písmena):'T', 'TRUE', 'Y', 'YES', or '1'
: Výsledek jetrue
'F', 'FALSE', 'N', 'NO', or '0'
: Výsledek jefalse
NULL
: Výsledek jeNULL
V opačném případě Azure Databricks vrátí neplatnou vstupní syntaxi pro logickou chybu typu.
Pomocí try_cast můžete převést neplatné chyby dat na
NULL
. -
Pravidla typu skutečné hodnoty
VARIANT
typu platí.
Příklady
> 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
BINÁRNÍ
Pokud je binární targetType
a sourceExpr
je typu:
-
Výsledek je
NULL
typuBINARY
. -
Výsledkem je kódování
surceExpr
UTF-8 . -
Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem
VARIANT
.
Příklady
> 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
POLE
Pokud je pole ARRAY targetElementType > a sourceExpr
je typu:< targetType
-
Výsledek je
NULL
hodnotatargeType
. -
Pokud je přetypování
targetElementType
sourceElementType
podporováno, výsledek je sARRAY<targetElementType>
veškerými prvky přetypován natargetElementType
hodnotu .Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje nebo pokud některý z prvků nejde přetypovat.
Pomocí try_cast můžete převést neplatná data nebo přetečení na
NULL
chyby . -
Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem
VARIANT
.
Příklady
> 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
Pokud je hodnota MAP < targetKeyType, targetValueType > a sourceExpr
je typu:
-
Výsledek je
NULL
hodnotatargetType
. MAP <sourceKeyType, sourceValueType >
Pokud jsou přetypování z
targetKeyType
sourceKeyType
asourceValueType
natargetValueType
podporované, výsledek je sMAP<targetKeyType, targetValueType>
přetypování všech kláves natargetKeyType
přetypování a všechny hodnoty přetypování natargetValueType
hodnotu .Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje nebo pokud některé z klíčů nebo hodnot nejde přetypovat.
Pomocí try_cast můžete převést neplatná data nebo přetečení na
NULL
chyby .-
Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem
VARIANT
. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Každý
sourceFieldName
typSTRING
se přetypujetargetKeyType
na klíč mapy a mapuje se na ho. Každá hodnota zdrojovéhosourceFieldType
pole je přetypovánatargetValueType
a mapována odpovídající hodnota mapování.Azure Databricks vyvolá chybu, pokud některé přetypování nejsou podporovány nebo pokud některé z hodnot polí nebo hodnot klíčů nelze přetypovat.
Pomocí try_cast můžete převést neplatná data nebo přetečení na
NULL
chyby .
Příklady
> 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}
STRUCT
Pokud se jedná targetType
o STRUCT <[targetFieldName: targetFieldType [NOT NULL] [COMMENT str] [, ...]] > a sourceExpr
je typu:
-
Výsledek je
NULL
hodnotatargetType
. STRUCT < [sourceFieldName: sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
Lze
sourceExpr
přetypovat natargetType
, pokud jsou splněny všechny tyto podmínky:- Typ zdroje má stejný počet polí jako cíl.
- Pro všechna pole:
sourceFieldTypeN
lze přetypovat natargetFieldTypeN
. - Pro všechny hodnoty polí: Zdrojová hodnota pole N může být přetypována
targetFieldTypeN
a hodnota není null, pokud je cílové pole N označeno jakoNOT NULL
.
sourceFieldName
s, omezení zdrojeNOT NULL
a zdrojeCOMMENT
se nemusí shodovattargetType
s a jsou ignorovány.Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje nebo pokud některá z polí nejde přetypovat.
Pomocí try_cast můžete převést neplatná data nebo přetečení na
NULL
chyby .-
Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem
VARIANT
. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Všechna
sourceFieldName
s jsou shodná ssourceFieldName
. Každá hodnota zdrojovéhosourceFieldType
pole se přetypuje na shodnoutargetValueType
a namapovanou na odpovídající hodnotu mapy.targetFieldName
Pokud se hodnota pole neshoduje, hodnota pole jeNULL
.sourceFieldName
Pokud se neshoduje, pole se ignoruje.Azure Databricks vyvolá chybu, pokud některé přetypování nejsou podporovány nebo pokud některé z hodnot polí nebo hodnot klíčů nelze přetypovat.
Pomocí try_cast můžete převést neplatná data nebo přetečení na
NULL
chyby .
Příklady
> 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"}
VARIANT
Pokud se jedná targetType
o variantu a sourceExpr
je typu:
-
Výsledek je
NULL
typuVARIANT
. -
Výsledkem je hodnota
VARIANT
představující číselnou hodnotu. PřesnostDECIMAL
typů musí být <= 38.Všechny celočíselné číselné hodnoty jsou mapovány na
BIGINT
.Všechny
DECIMAL
hodnoty se mapují na jejich nejužší přesnost a měřítko. -
Výsledkem je hodnota
VARIANT
představujícíSTRING
hodnotu. DATE (Datum)
Výsledkem je hodnota
VARIANT
představujícíDATE
hodnotu.-
Výsledkem je hodnota
VARIANT
představujícíTIMESTAMP
hodnotu. -
Výsledkem je hodnota
VARIANT
představujícíTIMESTAMP NTZ
hodnotu. -
Výsledkem je hodnota
VARIANT
představujícíBOOLEAN
hodnotu. -
Výsledkem je hodnota
VARIANT
představujícíBINARY
hodnotu. -
Pokud je přetypování
sourceElementType
VARIANT
podporováno, výsledek představujeVARIANT
ARRAY<sourceElementType>
.Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje.
Pomocí try_cast můžete převést neplatná data nebo přetečení na
NULL
chyby .
Příklady
> SELECT cast(NULL AS VARIANT);
NULL
> SELECT cast(5.1000 AS VARIANT);
5.1
> SELECT schema_of_variant(cast(5 AS VARIANT));
BIGINT