Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
Databricks SQL
Databricks Runtime
Hiermee wordt de waarde expr omgezet in het doelgegevenstype type. Deze operator is een synoniem voor :: de operator (dubbele punt)
Syntaxis
cast(sourceExpr AS targetType)
Argumenten
-
sourceExpr: Elke castable expressie. -
targetType: het gegevenstype van het resultaat.
Retouren
Het resultaat is type targetType.
De volgende combinaties van het casten van gegevenstypen zijn geldig:
| Bron (rij) Doel (kolom) | ONGELDIG | numeriek | SNAAR | DATUM | TIJDSTEMPEL | TIMESTAMP_NTZ | jaar-maandinterval | dag-tijdsinterval | Boolean | BINAIR | ARRAY | KAART | STRUCTUUR | VARIANTE | OBJECT |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ONGELDIG | J | J | J | J | J | J | J | J | J | J | J | J | J | J | N |
| numeriek | N | J | J | N | J | N | J | J | J | N | N | N | N | J | N |
| SNAAR | N | J | J | J | J | J | J | J | J | J | N | N | N | J | N |
| DATUM | N | N | J | J | J | J | N | N | N | N | N | N | N | J | N |
| TIJDSTEMPEL | N | J | J | J | J | J | N | N | N | N | N | N | N | J | N |
| TIMESTAMP_NTZ | N | N | J | J | J | J | N | N | N | N | N | N | N | J | N |
| jaar-maandinterval | N | J | J | N | N | N | J | N | N | N | N | N | N | N | N |
| dag-tijdsinterval | N | J | J | N | N | N | N | J | N | N | N | N | N | N | N |
| Boolean | N | J | J | N | J | N | N | N | J | N | N | N | N | J | N |
| BINAIR | N | J | J | N | N | N | N | N | N | J | N | N | N | J | N |
| ARRAY | N | N | J | N | N | N | N | N | N | N | J | N | N | J | N |
| KAART | N | N | J | N | N | N | N | N | N | N | N | J | N | N | N |
| STRUCTUUR | N | N | J | N | N | N | N | N | N | N | N | N | J | N | N |
| VARIANTE | N | J | J | J | J | J | N | N | J | J | J | J | J | J | N |
| OBJECT | N | N | N | N | N | N | N | N | N | N | N | J | J | N | N |
Regels en beperkingen op basis van targetType
Waarschuwing
Als in Databricks Runtime spark.sql.ansi.enabledveroorzaakt een overloop geen fout, maar wordt het resultaat 'verpakt'.
Een sourceExpr waarde met een ongeldige notatie of ongeldige tekens voor targetType resulteert in een NULL.
numeriek
Als het targetType een numerieke waarde is en sourceExpr van het type is:
-
Het resultaat is een
NULLvan het opgegeven numerieke type. -
Als
targetTypedit een integraal numerieke waarde is, wordtsourceExprhet resultaat afgekapt tot een geheel getal.Anders wordt
sourceExprhet resultaat afgerond om te passen binnen de beschikbare schaal vantargetType.Als de waarde buiten het bereik van
targetTypevalt, wordt er een overloopfout gegenereerd.Gebruik try_cast om overloopfouten om te zetten in
NULL. -
sourceExprwordt gelezen als een letterlijke waarde van detargetType.Als
sourceExprniet voldoet aan de notatie van letterlijke waarden, veroorzaakt dit een fout.Als de waarde buiten het bereik van de
targetTypewaarde valt, wordt er een overloopfout gegenereerd.Gebruik try_cast om overloop- en ongeldige indelingsfouten om te zetten in
NULL. -
Het resultaat is het aantal seconden dat is verstreken tussen
1970-01-01 00:00:00 UTCensourceExpr.Als
targetTypedit een integraal numerieke waarde is, wordt het resultaat afgekapt tot een geheel getal.Anders wordt het resultaat afgerond om te passen bij de beschikbare schaal van
targetType.Als het resultaat buiten het bereik van
targetTypevalt, ontstaat er een overloopfout.Gebruik try_cast om overloopfouten om te zetten in
NULL. -
Van toepassing op:
Databricks SQL
Databricks Runtime 11.3 LTS en hogerHet doeltype moet een exacte numerieke waarde zijn.
Gezien een
INTERVAL upper_unit TO lower_unitwordt het resultaat gemeten in het totale aantallower_unit. Als dit hetlower_unitisSECOND, worden fractionele seconden rechts van het decimaalteken opgeslagen. Voor alle andere intervallen is het resultaat altijd een integraal getal. -
Als
sourceExpris:-
true: Het resultaat is 1. -
false: Het resultaat is 0. -
NULL: Het resultaat isNULL.
-
-
De regels voor het type van de werkelijke waarde van het
VARIANT-type zijn van toepassing.
Voorbeelden
> 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
TEKENREEKS
Als de sourceExpr een STRING is, neemt de resulterende STRING de sortering van sourceExprover.
In alle andere gevallen is de sortering van de resulterende STRING de standaardsortering.
Om de sortering te wijzigen, voegt u de collate uitdrukking toe.
Als het targetType een STRING type is en sourceExpr van het type is:
-
Het resultaat is een
NULLtekenreeks. -
Het resultaat is het letterlijke getal met een optioneel minteken en geen voorloopnullen, behalve het enkele cijfer links van het decimaalteken. Als de waarde
targetTypegroter isDECIMAL(p, s)sdan 0, wordt er een decimaalteken toegevoegd en worden volgnullen opgeteld om te schalen. -
Als het absolute getal kleiner is dan dat
10,000,000en groter of gelijk is aan0.001, wordt het resultaat uitgedrukt zonder wetenschappelijke notatie met ten minste één cijfer aan beide zijden van het decimaalteken.Anders gebruikt Azure Databricks een mantissa gevolgd door
Een een exponent. De mantissa heeft een optioneel voorloopteken gevolgd door één cijfer links van het decimaalteken en het minimale aantal cijfers dat groter is dan nul aan de rechterkant. De exponent heeft een optioneel voorafgaand minteken. -
Als het jaar tussen 9999 BCE en 9999 CE ligt, is het resultaat een datumstring van het formulier
-YYYY-MM-DDenYYYY-MM-DDrespectievelijk.Voor jaren vóór of na dit bereik wordt het benodigde aantal cijfers toegevoegd aan het jaaronderdeel en
+wordt gebruikt voor CE. -
Als het jaar tussen 9999 BCE en 9999 CE ligt, is het resultaat een timestampString van het formulier
-YYYY-MM-DD hh:mm:ssenYYYY-MM-DD hh:mm:ssrespectievelijk.Voor jaren vóór of na dit bereik wordt het benodigde aantal cijfers toegevoegd aan het jaaronderdeel en
+wordt gebruikt voor CE.Indien nodig worden fractionele seconden
.f...toegevoegd. -
Als het jaar tussen 9999 BCE en 9999 CE ligt, is het resultaat een timestampString van het formulier
-YYYY-MM-DD hh:mm:ssenYYYY-MM-DD hh:mm:ssrespectievelijk.Voor jaren vóór of na dit bereik wordt het benodigde aantal cijfers toegevoegd aan het jaaronderdeel en
+wordt gebruikt voor CE.Indien nodig worden fractionele seconden
.f...toegevoegd. -
Het resultaat is de kortste representatie van het interval-literal. Als het interval negatief is, wordt het teken ingesloten in de
interval-string. Voor eenheden die kleiner zijn dan 10, worden voorloopnullen weggelaten.Een tekenreeks voor een normaal jaar-maandinterval heeft de volgende notatie:
INTERVAL 'Y' YEARINTERVAL 'Y-M' YEAR TO MONTHINTERVAL 'M' MONTH
-
Het resultaat is de kortste representatie van het interval-literal. Als het interval negatief is, wordt het teken ingesloten in de
interval-string. Voor eenheden kleiner dan 10 worden voorloopnullen weggelaten.Een typische tekenreeks voor het tijdsinterval van de dag heeft de volgende notatie:
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
-
Het resultaat van de
trueBooleaanse waarde is deSTRINGletterlijke waardetrue. Voorfalseis het de string-literalfalse. VoorNULLis het een NULL-tekenreeks. -
Een resultaat is het binaire getal
sourceExprdat wordt geïnterpreteerd als een UTF-8-tekenreeks.Azure Databricks valideert de UTF-8 tekens niet. Een cast van
BINARYnaarSTRINGzal nooit vervangingstekens injecteren of een fout veroorzaken. -
Het resultaat is een komma-gescheiden lijst met cast-elementen, die wordt omgeven door vierkante haken
[ ]. Eén spatie volgt elke komma. EenNULL-element wordt vertaald naar een letterlijkenull.In Azure Databricks worden afzonderlijke elementen niet geciteerd of anderszins aangeduid, zelfs als ze haakjes of komma's bevatten.
-
Het resultaat is een door komma's gescheiden lijst van cast-sleutelwaardeparen, die tussen accolades
{ }staat. Eén spatie volgt elke komma. Elk sleutelwaardepaar wordt gescheiden door een->. EenNULLkaartwaarde wordt omgezet in letterlijkenullwaarde.In Azure Databricks worden geen afzonderlijke sleutels of waarden aanhalingstekens of anderszins gemarkeerd, wat betekent dat deze zelf mogelijk accolades, komma's of
->kunnen bevatten. -
Het resultaat is een lijst van cast-veldwaarden gescheiden door komma's, die tussen accolades staat
{ }. Eén spatie volgt elke komma. EenNULLveldwaarde wordt omgezet in een letterlijke waardenull.In Azure Databricks worden afzonderlijke veldwaarden niet met aanhalingstekens omsloten of anderszins gemarkeerd, en deze kunnen zelf accolades of komma's bevatten.
-
De regels voor het type van de werkelijke waarde van het
VARIANT-type zijn van toepassing.
Voorbeelden
> 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
Als het targetType een DATE type is en sourceExpr van het type is:
-
Het resultaat is een
NULLDATE. -
sourceExprmoet een geldige dateString zijn.Als
sourceExprgeen geldigedateStringis, retourneert Azure Databricks een fout.Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL. -
Het resultaat is het datumgedeelte van de tijdstempel
sourceExpr. -
Het resultaat is het datumgedeelte van de timestamp_ntz
sourceExpr. -
De typeregels voor de werkelijke waarde die door het
VARIANTgegevenstype worden bewaard, zijn van toepassing.
Voorbeelden
> 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
TIJDSTEMPEL
Als het targetType een TIMESTAMP type is en sourceExpr van het type is:
-
Het resultaat is een
NULLDATE. -
sourceExprwordt gelezen als het aantal seconden sinds1970-01-01 00:00:00 UTC.Breuken kleiner dan microseconden worden afgekapt.
Als de waarde buiten het bereik valt
TIMESTAMP, wordt er een overloopfout gegenereerd.Gebruik try_cast om overloopfouten om te zetten in
NULL. -
sourceExprmoet een geldige timestampString zijn.Als
sourceExprgeen geldigetimestampStringis, retourneert Azure Databricks een fout.Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL. -
Het resultaat is
sourceExprDATEom00:00:00uur.
Het resultaat is een tijdstempelwaarde met dezelfde velden jaar/maand/dag/uur/minuut/seconde van timestamp_ntz sourceExpr.
-
De typeregels voor de werkelijke waarde die door het
VARIANTgegevenstype worden bewaard, zijn van toepassing.
Voorbeelden
> 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
Als het targetType een TIMESTAMP_NTZ type is en sourceExpr van het type is:
-
Het resultaat is een
NULLDATE. -
sourceExprmoet een geldige timestampString zijn.Als
sourceExprgeen geldigetimestampStringis, retourneert Azure Databricks een fout.Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL. -
Het resultaat is de
sourceExprDATUM bij00:00:00uren. -
Het resultaat is de lokale tijd als
sourceExprin de sessietijdzone. -
De typeregels voor de werkelijke waarde die door het
VARIANTgegevenstype worden bewaard, zijn van toepassing.
Voorbeelden
> 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
jaar-maandinterval
Als het interval van een targetTypejaarmaand is en sourceExpr van het type is:
-
Het resultaat is een
NULLjaarmaandinterval. -
Van toepassing op:
Databricks SQL
Databricks Runtime 11.3 LTS en hogerDe numerieke waarde wordt geïnterpreteerd als het aantal lagere eenheden van het
targetTypejaarmaandIntervalQualifier. -
sourceExprmoet een geldig jaarMonthIntervalString zijn.Als
sourceExprgeen geldigeyearMonthIntervalStringis, retourneert Azure Databricks een fout.Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL. -
Als het
targetTypejaarMonthIntervalQualifier de waarde bevatMONTH, blijft de waarde ongewijzigd, maar wordt deze opnieuw geïnterpreteerd zodat deze overeenkomt met het doeltype.Anders, als het brontype yearMonthIntervalQualifier
MONTHbevat, wordt het resultaat afgekapt tot volledige jaren.
Voorbeelden
> 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
dagtijdinterval
Als het targetType een daginterval is en sourceExpr van het type is:
-
Het resultaat is een
NULLdag-tijdsinterval. -
Van toepassing op:
Databricks SQL
Databricks Runtime 11.3 LTS en hogerDe numerieke waarde wordt geïnterpreteerd als het aantal lagere eenheden van de
targetTypedayTimeIntervalQualifier. Als de eenheidSECONDis, worden breuken geïnterpreteerd als fractionele seconden. -
sourceExprmoet een geldige dayTimeIntervalString zijn.Als
sourceExprgeen geldigedayTimeIntervalStringis, retourneert Azure Databricks een fout.Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL. -
Als dayTimeIntervalQualifier
targetTypede kleinste eenheid van het brontype dayTimeIntervalQualifier bevat, blijft de waarde ongewijzigd, maar wordt deze opnieuw geïnterpreteerd zodat deze overeenkomt met het doeltype.Anders wordt het
sourceExprinterval afgekapt om aan detargetTypete passen.
> 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
Booleaans
Als het targetType een BOOLEAANSE waarde is en sourceExpr van het type is:
-
Het resultaat is een
NULLvan het typeBOOLEAN. -
Als
sourceExpris:0: Het resultaat isfalse.-
NULL: Het resultaat isNULL. -
special floating point value: Het resultaat istrue.
Anders is het resultaat
true.-
-
Als
sourcEexprdit het geval is (niet hoofdlettergevoelig):-
'T', 'TRUE', 'Y', 'YES', or '1': Het resultaat istrue -
'F', 'FALSE', 'N', 'NO', or '0': Het resultaat isfalse -
NULL: Het resultaat isNULL
Anders geeft Azure Databricks een foutmelding van ongeldige invoersyntaxis voor het booleaanse type terug.
Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL. -
-
De regels voor het type van de werkelijke waarde van het
VARIANT-type zijn van toepassing.
Voorbeelden
> 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
BINAIR
Als het targetType een BINAIR is en sourceExpr van het type is:
-
Het resultaat is een
NULLvan het typeBINARY. -
Het resultaat is de UTF-8-codering van de
surceExpr. -
De typeregels voor de werkelijke waarde die door het
VARIANTgegevenstype worden bewaard, zijn van toepassing.
Voorbeelden
> 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
ARRAY
Als het targetType een ARRAY < targetElementType > is en sourceExpr van het type is:
-
Het resultaat is een
NULLvan detargeType. -
Als de cast van
sourceElementTypenaartargetElementTypewordt ondersteund, is het resultaat eenARRAY<targetElementType>waarbij alle elementen worden gecast naartargetElementType.Azure Databricks genereert een fout als de cast niet wordt ondersteund of als een van de elementen niet kan worden gecast.
Gebruik try_cast om ongeldige gegevens of overloopfouten om te zetten in
NULL. -
De typeregels voor de werkelijke waarde die door het
VARIANTgegevenstype worden bewaard, zijn van toepassing.
Voorbeelden
> 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]
KAART
Als het targetType een MAP < targetKeyType, targetValueType > is en sourceExpr van het type is:
-
Het resultaat is een
NULLvan detargetType. MAP <sourceKeyType, sourceValueType >
Als de casts van
sourceKeyTypenaartargetKeyTypeensourceValueTypenaartargetValueTypeworden ondersteund, is het resultaat eenMAP<targetKeyType, targetValueType>waarbij alle sleutels naar detargetKeyTypeworden gecast en alle waarden naar detargetValueTypeworden gecast.Azure Databricks genereert een fout als de cast niet wordt ondersteund of als een van de sleutels of waarden niet kan worden gecast.
Gebruik try_cast om ongeldige gegevens of overloopfouten om te zetten in
NULL.-
De typeregels voor de werkelijke waarde die door het
VARIANTgegevenstype worden bewaard, zijn van toepassing. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Elke
sourceFieldNamevan het typeSTRINGwordt omgezet naartargetKeyTypeen toegewezen aan een sleutel in de map. Elke bronveldwaarde vansourceFieldTypeis casttargetValueTypeen toegewezen aan de respectieve kaartwaarde.Azure Databricks genereert een fout als casts niet worden ondersteund of als een van de veldwaarden of sleutelwaarden niet kan worden gecast.
Gebruik try_cast om ongeldige gegevens of overloopfouten om te zetten in
NULL.
Voorbeelden
> 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}
Structuur
Als targetType een STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > is en sourceExpr is van het type:
-
Het resultaat is een
NULLvan detargetType. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
De
sourceExprkan worden omgezet intargetTypeals aan al deze voorwaarden wordt voldaan:- Het brontype heeft hetzelfde aantal velden als het doel
- Voor alle velden:
sourceFieldTypeNkan worden omgezet in detargetFieldTypeN. - Voor alle veldwaarden: de bronveldwaarde N kan worden omgezet
targetFieldTypeNnaar en de waarde is niet null als doelveld N is gemarkeerd alsNOT NULL.
sourceFieldNames, bronbeperkingenNOT NULLen bronbeperkingenCOMMENThoeven niet overeen te komen met detargetTypeen worden genegeerd.Azure Databricks genereert een fout als de cast niet wordt ondersteund of als een van de velden niet kan worden gecast.
Gebruik try_cast om ongeldige gegevens of overloopfouten om te zetten in
NULL.-
De typeregels voor de werkelijke waarde die door het
VARIANTgegevenstype worden bewaard, zijn van toepassing. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Alle
sourceFieldNames worden vergeleken metsourceFieldNames. Elke bronveldwaarde vansourceFieldTypewordt omgezet in de bijbehorendetargetValueTypeen toegewezen aan de respectieve mapwaarde.Als een
targetFieldNamewaarde niet overeenkomt, isNULLde veldwaarde .Als een
sourceFieldNameveld niet overeenkomt, wordt het veld genegeerd.Azure Databricks genereert een fout als casts niet worden ondersteund of als een van de veldwaarden of sleutelwaarden niet kan worden gecast.
Gebruik try_cast om ongeldige gegevens of overloopfouten om te zetten in
NULL.
Voorbeelden
> 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
Als het targetType een VARIANT is en sourceExpr van het type is:
-
Het resultaat is een
NULLvan het typeVARIANT. -
Het resultaat is een
VARIANT, die de numerieke waarde vertegenwoordigt. De precisie vanDECIMALtypen moet = 38 zijn <.Alle integrale numerieke gegevens worden toegewezen aan
BIGINT.Alle
DECIMALwaarden worden toegewezen aan hun nauwste precisie en schaal. -
Het resultaat is een
VARIANT, die deSTRINGwaarde vertegenwoordigt. -
Het resultaat is een
VARIANT, die deDATEwaarde vertegenwoordigt. -
Het resultaat is een
VARIANT, die deTIMESTAMPwaarde vertegenwoordigt. -
Het resultaat is een
VARIANT, die deTIMESTAMP NTZwaarde vertegenwoordigt. -
Het resultaat is een
VARIANT, die deBOOLEANwaarde vertegenwoordigt. -
Het resultaat is een
VARIANT, die deBINARYwaarde vertegenwoordigt. -
Als de cast van
sourceElementTypenaarVARIANTwordt ondersteund, is het resultaatVARIANT, datARRAY<sourceElementType>vertegenwoordigt.Azure Databricks genereert een fout als de cast niet wordt ondersteund.
Gebruik try_cast om ongeldige gegevens of overloopfouten om te zetten in
NULL.
Voorbeelden
> SELECT cast(NULL AS VARIANT);
NULL
> SELECT cast(5.1000 AS VARIANT);
5.1
> SELECT schema_of_variant(cast(5 AS VARIANT));
BIGINT