cast
-functie
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 puntteken)
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:
Brondoel (rij) Doel(kolom) | LEEGTE | numeriek | SNAAR | DATUM | TIMESTAMP | TIMESTAMP_NTZ | jaar-maandinterval | dag-tijdsinterval | BOOLEAANS | BINAIR | ARRAY | KAART | STRUCT | VARIANT | OBJECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LEEGTE | J | J | J | J | J | J | J | J | J | J | J | J | J | Y | N |
numeriek | N | J | Y | N | Y | N | J | J | Y | N | N | N | N | Y | N |
SNAAR | N | J | J | J | J | J | J | J | J | Y | N | N | N | Y | N |
DATUM | N | N | J | J | J | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP | N | J | J | J | J | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP_NTZ | N | N | J | J | J | Y | N | N | N | N | N | N | N | Y | N |
jaar-maandinterval | N | J | Y | N | N | N | Y | N | N | N | N | N | N | N | N |
dag-tijdsinterval | N | J | Y | N | N | N | N | Y | N | N | N | N | N | N | N |
BOOLEAANS | N | J | Y | N | Y | N | N | N | Y | N | N | N | N | Y | N |
BINAIR | N | J | Y | N | N | N | N | N | N | Y | N | N | N | Y | N |
ARRAY | N | N | Y | N | N | N | N | N | N | N | Y | N | N | Y | N |
KAART | 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 |
VARIANT | N | J | J | J | J | Y | N | N | J | J | J | J | J | Y | N |
OBJECT | N | N | N | N | N | N | N | N | N | N | N | J | Y | N | N |
Regels en beperkingen op basis van targetType
Waarschuwing
Als in Databricks Runtime spark.sql.ansi.enabled isfalse
, veroorzaakt 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
NULL
van het opgegeven numerieke type. -
Als
targetType
dit een integraal numerieke waarde is, wordtsourceExpr
het resultaat afgekapt tot een geheel getal.Anders wordt
sourceExpr
het resultaat afgerond op een geschikte schaal vantargetType
.Als de waarde buiten het bereik van
targetType
valt, wordt er een overloopfout gegenereerd.Gebruik try_cast om overloopfouten om te zetten in
NULL
. -
sourceExpr
wordt gelezen als een letterlijke waarde van detargetType
.Als
sourceExpr
deze niet voldoet aan de notatie voor letterlijke waarden, wordt er een fout gegenereerd.Als de waarde buiten het bereik van de
targetType
waarde 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
1970-01-01 00:00:00 UTC
tussen ensourceExpr
.Als
targetType
dit een integraal numerieke waarde is, wordt het resultaat afgekapt tot een geheel getal.Anders wordt het resultaat afgerond op een geschikte schaal van
targetType
.Als het resultaat buiten het bereik valt
targetType
, wordt er een overloopfout gegenereerd.Gebruik try_cast om overloopfouten om te zetten in
NULL
. -
Van toepassing op: Databricks SQL Databricks Runtime 11.3 LTS en hoger
Het doeltype moet een exacte numerieke waarde zijn.
INTERVAL upper_unit TO lower_unit
Gezien een resultaat wordt gemeten in het totale aantallower_unit
. Als dit hetlower_unit
isSECOND
, worden fractionele seconden rechts van het decimaalteken opgeslagen. Voor alle andere intervallen is het resultaat altijd een integraal getal. -
Als
sourceExpr
dat het volgende is:true
: Het resultaat is 1.false
: Het resultaat is 0.NULL
: Het resultaat isNULL
.
-
De regels van 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
STRING
Als het targetType
een tekenreekstype is en sourceExpr
van het type is:
-
Het resultaat is een
NULL
tekenreeks. -
Het resultaat is het letterlijke getal met een optioneel minteken en geen voorloopnullen, behalve het enkele cijfer links van het decimaalteken. Als de waarde
targetType
groter isDECIMAL(p, s)
s
dan 0, wordt er een decimaalteken toegevoegd en worden volgnullen opgeteld om te schalen. -
Als het absolute getal kleiner is dan dat
10,000,000
en 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
E
en 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 en optioneel voorloop minteken. -
Als het jaar tussen 9999 BCE en 9999 CE ligt, is het resultaat een datumstring van het formulier
-YYYY-MM-DD
enYYYY-MM-DD
respectievelijk.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:ss
enYYYY-MM-DD hh:mm:ss
respectievelijk.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:ss
enYYYY-MM-DD hh:mm:ss
respectievelijk.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 weergave van de letterlijke interval. 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' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
-
Het resultaat is de kortste weergave van de letterlijke interval. 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' 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
-
Het resultaat van de
true
Booleaanse waarde is deSTRING
letterlijke waardetrue
. Voorfalse
het is de letterlijke tekenreeksfalse
. DitNULL
is de NULL-tekenreeks. -
Een resultaat is het binaire getal
sourceExpr
dat wordt geïnterpreteerd als een UTF-8-tekenreeks.Azure Databricks valideert de UTF-8 tekens niet. Een cast van
BINARY
naar zalSTRING
nooit vervangingstekens injecteren of een fout veroorzaken. -
Het resultaat is een door komma's gescheiden lijst met gegoten elementen, die wordt accolades
[ ]
met vierkante haken. Eén spatie volgt elke komma. EenNULL
element wordt vertaald naar een letterlijke .null
In Azure Databricks worden afzonderlijke elementen niet aanhalingstekens of anderszins gemarkeerd, die mogelijk haakjes of komma's bevatten.
-
Het resultaat is een door komma's gescheiden lijst met cast-sleutelwaardeparen, die wordt accolades met accolades
{ }
. Eén spatie volgt elke komma. Elk sleutelwaardepaar wordt gescheiden door een->
. EenNULL
kaartwaarde wordt omgezet in letterlijkenull
waarde.In Azure Databricks worden geen afzonderlijke sleutels of waarden aanhalingstekens of anderszins gemarkeerd, die mogelijk accolades, komma's of
->
. -
Het resultaat is een door komma's gescheiden lijst met cast-veldwaarden, die wordt accolades met accolades
{ }
. Eén spatie volgt elke komma. EenNULL
veldwaarde wordt omgezet in een letterlijke waardenull
.In Azure Databricks worden afzonderlijke veldwaarden niet aanhalingstekens of anderszins gemarkeerd, die mogelijk accolades of komma's bevatten.
-
De regels van 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
DATUM
Als het targetType
een DATUM-type is en sourceExpr
van het type is:
-
Het resultaat is een
NULL
DATE
. -
sourceExpr
moet een geldige dateString zijn.Als
sourceExpr
dit een ongeldigedateString
waarde is, 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
VARIANT
gegevenstype 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
TIMESTAMP
Als het targetType
een TIMESTAMP-type is en sourceExpr
van het type is:
-
Het resultaat is een
NULL
DATE
. -
sourceExpr
wordt 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
. -
sourceExpr
moet een geldige timestampString zijn.Als
sourceExpr
dit een ongeldigetimestampString
waarde is, retourneert Azure Databricks een fout.Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL
. -
Het resultaat is de
sourceExpr
DATE
uren00:00:00
.
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
VARIANT
gegevenstype 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
NULL
DATE
. -
sourceExpr
moet een geldige timestampString zijn.Als
sourceExpr
dit een ongeldigetimestampString
waarde is, retourneert Azure Databricks een fout.Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL
. -
Het resultaat is de
sourceExpr
DATUM bij00:00:00
uren. -
Het resultaat is lokale tijd als de
sourceExpr
in de sessietijdzone. -
De typeregels voor de werkelijke waarde die door het
VARIANT
gegevenstype 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 targetType
jaarmaand is en sourceExpr
van het type is:
-
Het resultaat is een
NULL
jaarmaandinterval. -
Van toepassing op: Databricks SQL Databricks Runtime 11.3 LTS en hoger
De numerieke waarde wordt geïnterpreteerd als het aantal lagere eenheden van het
targetType
jaarmaandIntervalQualifier. -
sourceExpr
moet een geldig jaarMonthIntervalString zijn.Als
sourceExpr
dit een ongeldigeyearMonthIntervalString
waarde is, retourneert Azure Databricks een fout.Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL
. -
Als het
targetType
jaarMonthIntervalQualifier de waarde bevatMONTH
, blijft de waarde ongewijzigd, maar wordt deze opnieuw geïnterpreteerd zodat deze overeenkomt met het doeltype.Als dit niet het brontype yearMonthIntervalQualifier bevat
MONTH
, 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
dag-tijdsinterval
Als het targetType
een daginterval is en sourceExpr
van het type is:
-
Het resultaat is een
NULL
dag-tijdsinterval. -
Van toepassing op: Databricks SQL Databricks Runtime 11.3 LTS en hoger
De numerieke waarde wordt geïnterpreteerd als het aantal lagere eenheden van de
targetType
dayTimeIntervalQualifier. Als de eenheid breuken isSECOND
, worden geïnterpreteerd als fractionele seconden. -
sourceExpr
moet een geldige dayTimeIntervalString zijn.Als
sourceExpr
dit een ongeldigedayTimeIntervalString
waarde is, retourneert Azure Databricks een fout.Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL
. -
Als dayTimeIntervalQualifier
targetType
de 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
sourceExpr
interval afgekapt om aan detargetType
.
> 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
Als het targetType
een BOOLEAANSE waarde is en sourceExpr
van het type is:
-
Het resultaat is een van het
NULL
typeBOOLEAN
. -
Als
sourceExpr
dat het volgende is:0
: Het resultaat isfalse
.NULL
: Het resultaat isNULL
.special floating point value
: Het resultaat istrue
.
Anders is
true
het resultaat .
-
Als
sourcEexpr
dit 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 retourneert Azure Databricks een ongeldige invoersyntaxis voor een booleaanse fout.
Gebruik try_cast om ongeldige gegevensfouten om te zetten in
NULL
. -
De regels van 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
BINARY
Als het targetType
een BINAIR is en sourceExpr
van het type is:
-
Het resultaat is een van het
NULL
typeBINARY
. -
Het resultaat is de UTF-8-codering van de
surceExpr
. -
De typeregels voor de werkelijke waarde die door het
VARIANT
gegevenstype 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
NULL
van detargeType
. -
Als de cast van
sourceElementType
naartargetElementType
wordt ondersteund, is het resultaat eenARRAY<targetElementType>
met alle elementen die naar detargetElementType
cast worden gecast.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
VARIANT
gegevenstype 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]
MAP
Als het targetType
een MAP < targetKeyType, targetValueType > is en sourceExpr
van het type is:
-
Het resultaat is een
NULL
van detargetType
. MAP <sourceKeyType, sourceValueType >
Als de casts van
sourceKeyType
en naarsourceValueType
targetKeyType
targetValueType
worden ondersteund, is het resultaat eenMAP<targetKeyType, targetValueType>
met alle sleutels cast naar detargetKeyType
en alle waarden cast naar de .targetValueType
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
VARIANT
gegevenstype worden bewaard, zijn van toepassing. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Elk
sourceFieldName
typeSTRING
wordt gecast naartargetKeyType
en toegewezen aan een kaartsleutel. Elke bronveldwaarde vansourceFieldType
is casttargetValueType
en 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}
STRUCT
Als het targetType
een STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > is en sourceExpr
van het type is:
-
Het resultaat is een
NULL
van detargetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
De
sourceExpr
kan worden omgezet intargetType
als aan al deze voorwaarden wordt voldaan:- Het brontype heeft hetzelfde aantal velden als het doel
- Voor alle velden:
sourceFieldTypeN
kan worden omgezet in detargetFieldTypeN
. - Voor alle veldwaarden: de bronveldwaarde N kan worden omgezet
targetFieldTypeN
naar en de waarde is niet null als doelveld N is gemarkeerd alsNOT NULL
.
sourceFieldName
s, bronbeperkingenNOT NULL
en bronbeperkingenCOMMENT
hoeven niet overeen te komen met detargetType
en 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
VARIANT
gegevenstype worden bewaard, zijn van toepassing. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Alle
sourceFieldName
s worden vergeleken metsourceFieldName
s. Elke waarde vansourceFieldType
het bronveld wordt omgezet in de overeenkomendetargetValueType
en toegewezen aan de respectieve kaartwaarde.Als een
targetFieldName
waarde niet overeenkomt, isNULL
de veldwaarde .Als een
sourceFieldName
veld 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 van het
NULL
typeVARIANT
. -
Het resultaat is een
VARIANT
, die de numerieke waarde vertegenwoordigt. De precisie vanDECIMAL
typen moet = 38 zijn <.Alle integrale numerieke gegevens worden toegewezen aan
BIGINT
.Alle
DECIMAL
waarden worden toegewezen aan hun kleinste precisie en schaal. -
Het resultaat is een
VARIANT
, die deSTRING
waarde vertegenwoordigt. -
Het resultaat is een
VARIANT
, die deDATE
waarde vertegenwoordigt. -
Het resultaat is een
VARIANT
, die deTIMESTAMP
waarde vertegenwoordigt. -
Het resultaat is een
VARIANT
, die deTIMESTAMP NTZ
waarde vertegenwoordigt. -
Het resultaat is een
VARIANT
, die deBOOLEAN
waarde vertegenwoordigt. -
Het resultaat is een
VARIANT
, die deBINARY
waarde vertegenwoordigt. -
Als de cast van
sourceElementType
naarVARIANT
wordt ondersteund, wordtVARIANT
het resultaat weergegeven.ARRAY<sourceElementType>
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