Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Funkce
Platí pro:
Databricks SQL
Databricks Runtime
Přetypuje hodnotu expr na cílový datový typ type. Tento operátor je synonymem pro :: operátor dvojtečky (dvojtečka).
Syntaxe
cast(sourceExpr AS targetType)
Argumenty
-
sourceExpr: Libovolný převoditelný 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) Cíl (sloupec) | PRÁZDNOTA | číselný | ŘETĚZEC | DATE (Datum) | ČASOVÉ RAZÍTKO | TIMESTAMP_NTZ | interval rok-měsíc | časový interval během dne | BOOLEOVSKÝ | BINÁRNÍ | POLE | MAPA | STRUKTURA | VARIANTA | OBJEKT |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PRÁZDNOTA | Й | Й | Й | Й | Й | Й | Й | Й | Й | Й | Й | Й | Й | Й | N |
| číselný | N | Й | Й | N | Й | N | Й | Й | Й | N | N | N | N | Й | N |
| ŘETĚZEC | N | Й | Й | Й | Й | Й | Й | Й | Й | Й | N | N | N | Й | N |
| DATE (Datum) | N | N | Й | Й | Й | Й | N | N | N | N | N | N | N | Й | N |
| ČASOVÉ RAZÍTKO | N | Й | Й | Й | Й | Й | N | N | N | N | N | N | N | Й | N |
| TIMESTAMP_NTZ | N | N | Й | Й | Й | Й | N | N | N | N | N | N | N | Й | N |
| interval rok-měsíc | N | Й | Й | N | N | N | Й | N | N | N | N | N | N | N | N |
| časový interval během dne | N | Й | Й | N | N | N | N | Й | N | N | N | N | N | N | N |
| BOOLEOVSKÝ | N | Й | Й | N | Й | N | N | N | Й | N | N | N | N | Й | N |
| BINÁRNÍ | N | Й | Й | N | N | N | N | N | N | Й | N | N | N | Й | N |
| POLE | N | N | Й | N | N | N | N | N | N | N | Й | N | N | Й | N |
| MAPA | N | N | Й | N | N | N | N | N | N | N | N | Й | N | N | N |
| STRUKTURA | N | N | Й | N | N | N | N | N | N | N | N | N | Й | N | N |
| VARIANTA | N | Й | Й | Й | Й | Й | N | N | Й | Й | Й | Й | Й | Й | N |
| OBJEKT | N | N | N | N | N | N | N | N | N | N | N | Й | Й | N | N |
Běžné chybové podmínky
Pravidla a omezení založená na typu targetType
Varování
V Databricks Runtime, pokud je spark.sql.ansi.enabled nastaveno na false, přetečení nezpůsobí chybu, ale místo toho "zabalí" výsledek.
Hodnota sourceExpr s neplatným formátem nebo neplatnými znaky pro targetType povede k NULL.
numerické
Pokud je targetTypečíslo a sourceExpr je typu:
-
Výsledkem je
NULLurčitého číselného typu. -
Pokud
targetTypeje celočíselný číselný, výsledek sesourceExprzkrátí na celé číslo.V opačném případě se
sourceExprvýsledek zaokrouhlí, aby se přizpůsobil dostupnému měřítkutargetType.Pokud je hodnota mimo rozsah
targetType, Azure Databricks vyvolá CAST_OVERFLOW.Pomocí try_cast převeďte chyby přetečení na
NULL. -
sourceExprje přečteno jako literální hodnotatargetType.Pokud
sourceExprnevyhovuje formátu hodnot literálů, Azure Databricks vyvolá CAST_INVALID_INPUT.Pokud je hodnota mimo rozsah
targetType, Azure Databricks vyvolá CAST_OVERFLOW.Pomocí try_cast převést chyby přetečení a neplatného formátu na
NULL. -
Výsledkem je počet sekund uplynulých mezi
1970-01-01 00:00:00 UTCasourceExpr.Pokud
targetTypeje celočíselný číselný, výsledek se zkrátí na celé číslo.V opačném případě se výsledek zaokrouhlí na to, aby odpovídal dostupnému měřítku
targetType.Pokud je výsledek mimo rozsah
targetType, Azure Databricks vyvolá CAST_OVERFLOW.Pomocí try_cast převeďte chyby přetečení na
NULL. -
Platí pro:
Databricks SQL
Databricks Runtime 11.3 LTS a vyššíCílový typ musí být přesný číselný.
Výsledek dané
INTERVAL upper_unit TO lower_unitse měří v celkovém počtulower_unit. Pokud je hodnotalower_unitSECOND, desetinné sekundy jsou uloženy vpravo od desetinné čárky. Ve všech ostatních intervalech je výsledkem vždy celočíselné číslo. -
Pokud
sourceExprje:-
true: Výsledek je 1. -
false: Výsledek je 0. -
NULL: Výsledek jeNULL.
-
-
Pravidla typu skutečné hodnoty
VARIANTtypu 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);
Error: CAST_OVERFLOW
> SELECT cast(128 AS DECIMAL(2, 0));
Error: CAST_OVERFLOW
> SELECT cast('123' AS INT);
123
> SELECT cast('123.0' AS INT);
Error: CAST_INVALID_INPUT
> 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: CAST_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
ŘETĚZEC
Pokud je sourceExprSTRING, výsledný STRING dědí řazení sourceExpr.
Ve všech ostatních případech je kolace pro výsledné STRING výchozí kolací .
Pokud chcete změnit kolaci, přidejte výraz kolace.
Pokud je targetTypeSTRING typ a sourceExpr je typu:
-
Výsledkem je
NULLřetězec. -
Výsledkem je číslo jako doslovný zápis s nepovinným znaménkem minus a bez počátečních nul kromě jedné číslice vlevo od desetinné čárky. Pokud je hodnota
targetTypeDECIMAL(p, s)světší 0, přidá se desetinná čárka a koncové nuly se přidají do měřítka. binární číslo s plovoucí řádovou čárkou
Pokud je absolutní číslo menší
10,000,000a 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žije mantisu následovanou
Ea exponent. Mantisa může mít volitelné úvodní znaménko minus následovaná jednou číslicí nalevo od desetinné čárky a minimálním počtem číslic větších než nula napravo. Exponent má 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-DDaYYYY-MM-DDv uvedeném pořadí.Pro roky předcházející nebo po tomto rozsahu se k letopočtu přidají nezbytné číslice a
+se používá pro CE.-
Pokud je rok mezi 9999 př. n. l. a 9999 n. l., výsledkem je časové razítko ve formátu
-YYYY-MM-DD hh:mm:ssaYYYY-MM-DD hh:mm:ssrespektive.Pro roky předcházející nebo po tomto rozsahu se k letopočtu přidají nezbytné číslice a
+se používá pro CE.Zlomkové sekundy
.f...se v případě potřeby přidají. -
Pokud je rok mezi 9999 př. n. l. a 9999 n. l., výsledkem je časové razítko ve formátu
-YYYY-MM-DD hh:mm:ssaYYYY-MM-DD hh:mm:ssrespektive.Pro roky předcházející nebo po tomto rozsahu se k letopočtu přidají nezbytné číslice a
+se používá pro CE.Zlomkové sekundy
.f...se v případě potřeby přidají. -
Výsledkem je 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 a měsíce má tvar:
INTERVAL 'Y' YEARINTERVAL 'Y-M' YEAR TO MONTHINTERVAL 'M' MONTH
-
Výsledkem je 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' DAYINTERVAL 'D h' DAY TO HOURINTERVAL 'D h:m' DAY TO MINUTEINTERVAL 'D h:m:s' DAY TO SECONDINTERVAL 'h' HOURINTERVAL 'h:m' HOUR TO MINUTEINTERVAL 'm:s' MINUTE TO SECONDINTERVAL 's' SECOND
-
Výsledkem logické hodnoty
truejeSTRINGliteráltrue. Profalseje to literál STRINGfalse. ŘetězecNULLje NULL. -
Výsledkem je binární
sourceExprinterpretovaná jako sekvence znaků UTF-8.Azure Databricks neověřuje znaky UTF-8. Přetypování z
na nikdy nevloží náhradní znaky ani nevyvolá 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. PrvekNULLje přeložen do literálunull.Azure Databricks neuvozuje ani jinak neoznačí jednotlivé prvky, které mohou samy obsahovat závorky nebo čárky.
-
Výsledkem je čárkami oddělený seznam dvojic klíčových hodnot, který je uzavřený do složených závorek
{ }. Jedna mezera následuje za každou čárkou. Každý pár hodnot klíče je oddělený->hodnotou . HodnotaNULLmapy je přeložena do literálunull.Azure Databricks neoznačuje jednotlivé klíče nebo hodnoty, které můžou obsahovat složené závorky, čárky nebo
->. -
Výsledkem je čárkami oddělený seznam hodnot polí typu, který je uzavřen ve složených závorkách
{ }. Jedna mezera následuje za každou čárkou. HodnotaNULLpole je přeložena do literálunull.Azure Databricks neoznačí nebo jinak označí jednotlivé hodnoty polí, které mohou samy o sobě obsahovat složené závorky nebo čárky.
-
Pravidla typu skutečné hodnoty
VARIANTtypu 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
> SELECT cast(5 AS STRING) COLLATE UNICODE;
5
Datum
Pokud je targetTypeDATE typ a sourceExpr je typu:
-
Výsledkem je
NULLDATE. -
sourceExprmusí být platným dateStringem.Pokud
sourceExprnení platnýdateString, Azure Databricks vyvolá CAST_INVALID_INPUT.Pomocí try_cast můžete převést chyby způsobené neplatnými daty na
NULL. -
Výsledek je datumová část časového razítka
sourceExpr. -
Výsledkem je část data z 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: CAST_INVALID_INPUT
> 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
Pokud je targetTypeTIMESTAMP typ a sourceExpr je typu:
-
Výsledkem je
NULLDATE. -
sourceExprje 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, Azure Databricks vyvolá CAST_OVERFLOW.Pomocí try_cast převeďte chyby přetečení na
NULL. -
sourceExprmusí být platný timestampString.Pokud
sourceExprnení platnýtimestampString, Azure Databricks vyvolá CAST_INVALID_INPUT.Pomocí try_cast můžete převést chyby způsobené neplatnými daty na
NULL. DATE (Datum)
Výsledkem je
sourceExprDATE00:00:00hodina.
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: CAST_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: CAST_INVALID_INPUT
> 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 je targetTypeTIMESTAMP_NTZ typ a sourceExpr je typu:
-
Výsledkem je
NULLDATE. -
sourceExprmusí být platný timestampString.Pokud
sourceExprnení platnýtimestampString, Azure Databricks vyvolá CAST_INVALID_INPUT.Pomocí try_cast můžete převést chyby způsobené neplatnými daty na
NULL. DATE (Datum)
Výsledkem je
sourceExprDATUM v00:00:00hodinách.-
Výsledek je místní čas v časovém pásmu relace
sourceExpr. -
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: CAST_INVALID_INPUT
> 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 rok-měsíc
targetType Pokud je interval rok-měsíc a sourceExpr je typu:
-
Výsledkem je interval rok-měsíc
NULL. -
Platí pro:
Databricks SQL
Databricks Runtime 11.3 LTS a vyššíČíselný argument je interpretován jako počet nižších jednotek
targetTyperokuměsícIntervalQualifier. -
sourceExprmusí být platný rokMonthIntervalString.Pokud
sourceExprnení platnýyearMonthIntervalString, Azure Databricks vyvolá CAST_INVALID_INPUT.Pomocí try_cast můžete převést chyby způsobené neplatnými daty na
NULL. -
targetTypePokud rokMonthIntervalQualifier obsahujeMONTHhodnotu 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: CAST_INVALID_INPUT
> 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í doba
Pokud se jedná targetType o denní interval a sourceExpr je typu:
-
Výsledkem je
NULLdenní interval. -
Platí pro:
Databricks SQL
Databricks Runtime 11.3 LTS a vyššíČíselná hodnota se interpretuje jako počet nižších jednotek
targetTypedayTimeIntervalQualifier. Pokud je jednotkouSECOND, zlomky se interpretují jako zlomkové sekundy. -
sourceExprmusí být platný dayTimeIntervalString.Pokud
sourceExprnení platnýdayTimeIntervalString, Azure Databricks vyvolá CAST_INVALID_INPUT.Pomocí try_cast můžete převést chyby způsobené neplatnými daty na
NULL. -
targetTypePokud 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
sourceExprinterval 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: CAST_INVALID_INPUT
> 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 je targetType typu BOOLEAN a sourceExpr je typu:
-
Výsledek je
NULLtypuBOOLEAN. -
Pokud
sourceExprje:0: Výsledek jefalse.-
NULL: Výsledek jeNULL. -
special floating point value: Výsledek jetrue.
V opačném případě je výsledek
true.-
-
Pokud je
sourcEexpr(nezohledňuje velikost písmen):-
'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 vyvolá CAST_INVALID_INPUT.
Pomocí try_cast můžete převést chyby způsobené neplatnými daty na
NULL. -
-
Pravidla typu skutečné hodnoty
VARIANTtypu 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: CAST_INVALID_INPUT
> 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 targetTypebinární a sourceExpr je typu:
-
Výsledek je
NULLtypuBINARY. -
Výsledkem je kódování
surceExprUTF-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 targetType typu ARRAY < targetElementType > a sourceExpr je typu:
-
Výsledek je
NULLztargeType. -
Pokud je přetypování z
sourceElementTypenatargetElementTypepodporováno, výsledek jeARRAY<targetElementType>, ve kterém jsou všechny prvky přetypovány natargetElementType.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 chyby způsobené přetečením na
NULL. -
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: DATATYPE_MISMATCH
> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
Error: CAST_INVALID_INPUT
> SELECT cast(array('t', 'f', NULL)::VARIANT AS ARRAY<BOOLEAN>);
[true, false, NULL]
MAPA
targetType Pokud je MAP < typu targetKeyType, targetValueType > a sourceExpr je typu:
-
Výsledek je
NULLztargetType. MAP <sourceKeyType, sourceValueType >
Pokud jsou přetypování z
sourceKeyTypenatargetKeyTypea zsourceValueTypenatargetValueTypepodporovaná, výsledkem jeMAP<targetKeyType, targetValueType>, kde jsou všechny klávesy přetypovány natargetKeyTypea všechny hodnoty přetypovány natargetValueType.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 chyby způsobené přetečením na
NULL.-
Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem
VARIANT. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Každý
sourceFieldNametypuSTRINGje přetypován natargetKeyTypea přiřazen jako klíč mapy. Každá hodnota zdrojovéhosourceFieldTypepole je přetypovánatargetValueTypea přiřazena k odpovídající mapové hodnotě.Azure Databricks vyvolá chybu, pokud některé přetypování nejsou podporovány nebo pokud některé hodnoty polí nebo hodnoty klíče nelze přetypovat.
Pomocí try_cast můžete převést neplatná data nebo chyby způsobené přetečením na
NULL.
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: DATATYPE_MISMATCH
> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
Error: CAST_INVALID_INPUT
-- 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
Pokud se jedná targetType o STRUCT <[targetFieldName: targetFieldType [NOT NULL] [COMMENT str] [, ...]] > a sourceExpr je typu:
-
Výsledek je
NULLztargetType. STRUCT < [sourceFieldName: sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
Lze
sourceExprpř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:
sourceFieldTypeNmůže být přetypováno natargetFieldTypeN. - Pro všechny hodnoty polí: Zdrojová hodnota pole N může být přetypována
targetFieldTypeNa hodnota není null, pokud je cílové pole N označeno jakoNOT NULL.
sourceFieldNames, omezení zdrojůNOT NULLaCOMMENTs se nemusí shodovat setargetTypea 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 chyby způsobené přetečením na
NULL.-
Platí pravidla typů pro skutečnou hodnotu uloženou datovým typem
VARIANT. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Všechna
sourceFieldNames jsou shodná ssourceFieldName. Každá hodnota zdrojového polesourceFieldTypese přetypuje na odpovídajícítargetValueTypea namapuje na příslušnou hodnotu v mapě.Pokud se
targetFieldNameneshoduje, hodnota pole jeNULL.Pokud se
sourceFieldNameneshoduje, pole se ignoruje.Azure Databricks vyvolá chybu, pokud některé přetypování nejsou podporovány nebo pokud některé hodnoty polí nebo hodnoty klíče nelze přetypovat.
Pomocí try_cast můžete převést neplatná data nebo chyby způsobené přetečením na
NULL.
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: DATATYPE_MISMATCH
> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
Error: DATATYPE_MISMATCH
> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
Error: CAST_INVALID_INPUT
> 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"}
varianta
Pokud se jedná targetType o variantu a sourceExpr je typu:
-
Výsledek je
NULLtypuVARIANT. -
Výsledkem je hodnota
VARIANTpředstavující číselnou hodnotu. PřesnostDECIMALtypů musí být <= 38.Všechny celočíselné číselné hodnoty jsou mapovány na
BIGINT.Všechny
DECIMALhodnoty se mapují na jejich nejužší přesnost a měřítko. -
Výsledkem je hodnota
VARIANTpředstavujícíSTRINGhodnotu. DATE (Datum)
Výsledkem je hodnota
VARIANTpředstavujícíDATEhodnotu.-
Výsledkem je hodnota
VARIANTpředstavujícíTIMESTAMPhodnotu. -
Výsledkem je hodnota
VARIANTpředstavujícíTIMESTAMP NTZhodnotu. -
Výsledkem je hodnota
VARIANTpředstavujícíBOOLEANhodnotu. -
Výsledkem je hodnota
VARIANTpředstavujícíBINARYhodnotu. -
Pokud je přetypování z
sourceElementTypenaVARIANTpodporováno, výsledkem jeVARIANT, což představujeARRAY<sourceElementType>.Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje.
-
Toto přetypování není přímo podporováno, protože
VARIANTnemůže zachovat pořadí polí struktury. Pomocí to_variant_object převeďteSTRUCTnaVARIANTjakoOBJECT. -
Toto přetypování není přímo podporováno, protože
VARIANTnemůže udržet typMAP. Pomocí to_variant_object převeďteMAPnaVARIANTjakoOBJECT. Klíče mapy musí mít textové řetězce.Azure Databricks vyvolá chybu, pokud se přetypování nepodporuje.
Pomocí try_cast můžete převést neplatná data nebo chyby způsobené přetečením na
NULL.
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