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) | VOID | Číselné | ŘETĚZEC | DATE (Datum) | ČASOVÉ RAZÍTKO | TIMESTAMP_NTZ | interval mezi rokem | denní interval | BOOLEAN | BINÁRNÍ | POLE | MAPU | STRUCT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
Číselné | N | Y | Y | N | Y | N | Y | Y | Y | N | N | N | N |
ŘETĚZEC | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N |
DATE (Datum) | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N |
ČASOVÉ RAZÍTKO | 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 |
interval mezi rokem | N | Y | Y | N | N | N | Y | N | N | N | N | N | N |
denní interval | 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 |
BINÁRNÍ | N | Y | Y | N | N | N | N | N | N | Y | N | N | N |
POLE | N | N | Y | N | N | N | N | N | N | N | Y | N | N |
MAPU | 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 |
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 hodnota NULL zadaného číselného typu.
-
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 0.false
: Výsledek je 1.NULL
: Výsledek jeNULL
.
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
STRING
targetType
Pokud je typ STRING a sourceExpr
je typu:
-
Výsledkem je řetězec NULL.
-
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
je literáltrue
STRING , profalse
to je literálfalse
STRING a proNULL
něj je ř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.
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);
{}
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
.
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
Č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
DATUM v00:00:00
hodinách.
Výsledkem je hodnota časového razítka se stejným polem roku, měsíce, dne, hodiny, minuty a sekundy timestamp_ntz sourceExpr
.
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
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.
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
interval mezi rokem
targetType
Pokud je interval rok-měsíc a sourceExpr
je typu:
-
Výsledkem je interval s hodnotou NULL rok-měsíc.
-
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 denní interval s hodnotou NULL.
-
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
BOOLEAN
Pokud se jedná targetType
o logickou hodnotu a sourceExpr
je typu:
-
Výsledkem je logická hodnota NULL.
-
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
.
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
BINÁRNÍ
Pokud je binární targetType
a sourceExpr
je typu:
Příklady
> SELECT cast(NULL AS BINARY);
NULL
> SELECT hex(cast('Spark SQL' AS BINARY));
537061726B2053514C
> SELECT hex(cast('Oдesa' AS BINARY));
4FD0B4657361
POLE
Pokud je pole ARRAY targetElementType > a sourceExpr
je typu:<targetType
-
Výsledkem je hodnota NULL
targeType
. -
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 .
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.
MAPU
targetType
Pokud je hodnota MAP < targetKeyType, targetValueType > a sourceExpr
je typu:
-
Výsledkem je hodnota NULL
targetType
. 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 .
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.
STRUCT
Pokud se jedná targetType
o STRUCT <[targetFieldName: targetFieldType [NOT NULL] [COMMENT str] [, ...]] > a sourceExpr
je typu:
-
Výsledkem je hodnota NULL
targetType
. STRUCT < [sourceFieldName: sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
Lze
sourceExpr
přetypovat natargetType
, pokud jsou splněny všechny 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 klíčů nebo hodnot nejde 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') 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