Funktionen cast
Gäller för: Databricks SQL Databricks Runtime
Omvandlar värdet expr
till måldatatypen type
. Den här operatorn är synonym för operatorn :: (kolontecken)
Syntax
cast(sourceExpr AS targetType)
Argument
-
sourceExpr
: Valfritt kastreringsbart uttryck. -
targetType
: Resultatets datatyp.
Returer
Resultatet är typ targetType
.
Följande kombinationer av datatypsgjutning är giltiga:
Källa (rad) Mål(kolumn) | TOMRUM | numerisk | STRÄNG | DATE | TIMESTAMP | TIMESTAMP_NTZ | årsmånadsintervall | dagtidsintervall | BOOLESK | BINÄR | SAMLING | KARTA | STRUCT | VARIANT | OBJEKT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TOMRUM | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
numerisk | N | Y | Y | N | Y | N | Y | Y | Y | N | N | N | N | Y | N |
STRÄNG | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | Y | N |
DATE | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP | N | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP_NTZ | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
årsmånadsintervall | N | Y | Y | N | N | N | Y | N | N | N | N | N | N | N | N |
dagtidsintervall | N | Y | Y | N | N | N | N | Y | N | N | N | N | N | N | N |
BOOLESK | N | Y | Y | N | Y | N | N | N | Y | N | N | N | N | Y | N |
BINÄR | N | Y | Y | N | N | N | N | N | N | Y | N | N | N | Y | N |
SAMLING | N | N | Y | N | N | N | N | N | N | N | Y | N | N | Y | N |
KARTA | 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 | Y | Y | Y | Y | Y | N | N | Y | Y | Y | Y | Y | Y | N |
OBJEKT | N | N | N | N | N | N | N | N | N | N | N | Y | Y | N | N |
Regler och begränsningar baserade på targetType
Varning
Om spark.sql.ansi.enabled är false
i Databricks Runtime orsakar ett spill inte ett fel utan "omsluter" resultatet.
Ett sourceExpr
värde med ett ogiltigt format eller ogiltiga tecken för targetType
resulterar i en NULL
.
numeric
targetType
Om är ett numeriskt och sourceExpr
är av typen:
-
Resultatet är en
NULL
av den angivna numeriska typen. -
Om
targetType
är ett heltalsnumeriskt trunkeras resultatetsourceExpr
till ett heltal.Annars avrundas resultatet
sourceExpr
så att det passar den tillgängliga skalan förtargetType
.Om värdet ligger utanför intervallet
targetType
för utlöses ett spillfel.Använd try_cast för att omvandla spillfel till
NULL
. -
sourceExpr
läss som ett literalvärde förtargetType
.Om
sourceExpr
inte överensstämmer med formatet för literalvärden utlöses ett fel.Om värdet ligger utanför intervallet för
targetType
genereras ett spillfel.Använd try_cast för att omvandla spill och ogiltiga formatfel till
NULL
. -
Resultatet är antalet sekunder som förflutit mellan
1970-01-01 00:00:00 UTC
ochsourceExpr
.Om
targetType
är ett heltalsnumeriskt trunkeras resultatet till ett heltal.Annars avrundas resultatet så att det passar den tillgängliga skalan för
targetType
.Om resultatet ligger utanför intervallet
targetType
för genereras ett spillfel.Använd try_cast för att omvandla spillfel till
NULL
. -
Gäller för: Databricks SQL Databricks Runtime 11.3 LTS och senare
Måltypen måste vara exakt numerisk.
Givet ett
INTERVAL upper_unit TO lower_unit
resultat mäts i det totala antaletlower_unit
.lower_unit
Om ärSECOND
lagras bråksekunder till höger om decimaltecknet. För alla andra intervall är resultatet alltid ett heltal. -
Om
sourceExpr
är:-
true
: Resultatet är 1. -
false
: Resultatet är 0. -
NULL
: Resultatet ärNULL
.
-
-
Reglerna för typen av det faktiska värdet för
VARIANT
typen gäller.
Exempel
> 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
STRÄNG
Om sourceExpr
är en STRING
, ärver den resulterande STRING
sorteringen från sourceExpr
.
I alla andra fall är den resulterande sorteringen STRING
standardsorteringen.
Om du vill ändra sorteringen lägger du till sortera uttryck.
targetType
Om är en STRING-typ och sourceExpr
är av typen:
-
Resultatet är en
NULL
sträng. -
Resultatet är det literala talet med ett valfritt minustecken och inga inledande nollor förutom den ensiffriga siffran till vänster om decimaltecknet.
targetType
Om ärDECIMAL(p, s)
meds
större 0 läggs en decimalpunkt till och avslutande nollor läggs till för skalning. -
Om det absoluta talet är mindre än och
10,000,000
större eller lika0.001
med uttrycks resultatet utan vetenskaplig notation med minst en siffra på vardera sidan av decimaltecknet.Annars använder Azure Databricks en mantissa följt av
E
och en exponent. Mantissa har ett valfritt inledande minustecken följt av en siffra till vänster om decimaltecknet och det minsta antalet siffror som är större än noll till höger. Exponenten har och valfritt inledande minustecken. -
Om året är mellan 9999 f.Kr. och 9999 e.Kr. blir resultatet en dateString av formuläret
-YYYY-MM-DD
respektiveYYYY-MM-DD
.I flera år före eller efter det här intervallet läggs det nödvändiga antalet siffror till i årskomponenten och
+
används för CE. -
Om året är mellan 9999 f.Kr. och 9999 e.Kr. är resultatet en tidsstämpelSträng av formuläret
-YYYY-MM-DD hh:mm:ss
respektiveYYYY-MM-DD hh:mm:ss
.I flera år före eller efter det här intervallet läggs det nödvändiga antalet siffror till i årskomponenten och
+
används för CE.Bråk sekunder
.f...
läggs till om det behövs. -
Om året är mellan 9999 f.Kr. och 9999 e.Kr. är resultatet en tidsstämpelSträng av formuläret
-YYYY-MM-DD hh:mm:ss
respektiveYYYY-MM-DD hh:mm:ss
.I flera år före eller efter det här intervallet läggs det nödvändiga antalet siffror till i årskomponenten och
+
används för CE.Bråk sekunder
.f...
läggs till om det behövs. -
Resultatet är den kortaste representationen av intervallliteralen. Om intervallet är negativt bäddas tecknet in i
interval-string
. För enheter som är mindre än 10 utelämnas inledande nollor.En typisk årsmånadsintervallsträng har formuläret:
INTERVAL 'Y' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
-
Resultatet är den kortaste representationen av intervallliteralen. Om intervallet är negativt bäddas tecknet in i
interval-string
. För enheter som är mindre än 10 utelämnas inledande nollor.En typisk tidsintervallsträng för dagen har formuläret:
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
-
Resultatet av det
true
booleska är literalenSTRING
true
. Förfalse
det är strängliteralenfalse
. FörNULL
det är NULL-strängen. -
Ett resultat är binärfilen
sourceExpr
som tolkas som en UTF-8-teckensekvens.Azure Databricks verifierar inte UTF-8-tecknen. En gjuten från
BINARY
tillSTRING
kommer aldrig att mata in ersättningstecken eller generera ett fel. -
Resultatet är en kommaseparerad lista över skådespelarelement, som är omgiven av hakparenteser
[ ]
. Ett blanksteg följer varje kommatecken. EttNULL
element översätts till en literalnull
.Azure Databricks citerar inte eller markerar på annat sätt enskilda element, som själva kan innehålla hakparenteser eller kommatecken.
-
Resultatet är en kommaavgränsad lista över nyckel-värde-par, som omges av måsvingar
{ }
. Ett blanksteg följer varje kommatecken. Varje nyckelvärdepar avgränsas med en->
. EttNULL
kartvärde översätts till literalnull
.Azure Databricks citerar inte eller markerar på annat sätt enskilda nycklar eller värden, som i sig kan innehålla klammerparenteser, kommatecken eller
->
. -
Resultatet är en kommaavgränsad lista med gjutna fältvärden, som är klammerparenteser
{ }
. Ett blanksteg följer varje kommatecken. EttNULL
fältvärde översätts till en literalnull
.Azure Databricks citerar inte eller markerar på annat sätt enskilda fältvärden, som själva kan innehålla klammerparenteser eller kommatecken.
-
Reglerna för typen av det faktiska värdet för
VARIANT
typen gäller.
Exempel
> 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
targetType
Om är en DATE-typ och sourceExpr
är av typen:
-
Resultatet är en
NULL
DATE
. -
sourceExpr
måste vara en giltig dateString.Om
sourceExpr
inte är giltigtdateString
returnerar Azure Databricks ett fel.Använd try_cast för att omvandla ogiltiga datafel till
NULL
. -
Resultatet är datumdelen av tidsstämpeln
sourceExpr
. -
Resultatet är datumdelen av timestamp_ntz
sourceExpr
. -
Typreglerna för det faktiska värdet som innehas av
VARIANT
datatypen gäller.
Exempel
> 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
targetType
Om är en TIMESTAMP-typ och sourceExpr
är av typen:
-
Resultatet är en
NULL
DATE
. -
sourceExpr
läss som antalet sekunder sedan1970-01-01 00:00:00 UTC
.Bråk som är mindre än mikrosekunder trunkeras.
Om värdet ligger utanför intervallet
TIMESTAMP
för genereras ett spillfel.Använd try_cast för att omvandla spillfel till
NULL
. -
sourceExpr
måste vara en giltig tidsstämpelSträng.Om
sourceExpr
inte är giltigttimestampString
returnerar Azure Databricks ett fel.Använd try_cast för att omvandla ogiltiga datafel till
NULL
. -
Resultatet är
sourceExpr
DATE
på00:00:00
hrs.
Resultatet är ett tidsstämpelvärde med samma fält för år/månad/dag/timme/minut/sekund i timestamp_ntz sourceExpr
.
-
Typreglerna för det faktiska värdet som innehas av
VARIANT
datatypen gäller.
Exempel
> 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
targetType
Om är en TIMESTAMP_NTZ typ och sourceExpr
är av typen:
-
Resultatet är en
NULL
DATE
. -
sourceExpr
måste vara en giltig tidsstämpelSträng.Om
sourceExpr
inte är giltigttimestampString
returnerar Azure Databricks ett fel.Använd try_cast för att omvandla ogiltiga datafel till
NULL
. -
Resultatet är
sourceExpr
DATUM vid00:00:00
hrs. -
Resultatet är lokal tid som
sourceExpr
i sessionens tidszon. -
Typreglerna för det faktiska värdet som innehas av
VARIANT
datatypen gäller.
Exempel
> 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
årsmånadsintervall
targetType
Om är ett årsmånadsintervall och sourceExpr
är av typen:
-
Resultatet är ett
NULL
årsmånadsintervall. -
Gäller för: Databricks SQL Databricks Runtime 11.3 LTS och senare
Det numeriska värdet tolkas som antalet lägre enheter i
targetType
yearmonthIntervalQualifier. -
sourceExpr
måste vara ett giltigt årMonthIntervalString.Om
sourceExpr
inte är giltigtyearMonthIntervalString
returnerar Azure Databricks ett fel.Använd try_cast för att omvandla ogiltiga datafel till
NULL
. -
targetType
Om yearMonthIntervalQualifier innehållerMONTH
värdet förblir oförändrat, men omtolkas för att matcha måltypen.Annars, om källtypen yearMonthIntervalQualifier innehåller
MONTH
, trunkeras resultatet till hela år.
Exempel
> 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
dagtidsintervall
targetType
Om är ett dagtidsintervall och sourceExpr
är av typen:
-
Resultatet är ett
NULL
dagtidsintervall. -
Gäller för: Databricks SQL Databricks Runtime 11.3 LTS och senare
Det numeriska värdet tolkas som antalet lägre enheter i
targetType
dayTimeIntervalQualifier. Om enheten ärSECOND
bråktal tolkas den som bråksekunder. -
sourceExpr
måste vara en giltig dayTimeIntervalString.Om
sourceExpr
inte är giltigtdayTimeIntervalString
returnerar Azure Databricks ett fel.Använd try_cast för att omvandla ogiltiga datafel till
NULL
. -
targetType
Om dayTimeIntervalQualifier innehåller den minsta enheten av källtypen dayTimeIntervalQualifier förblir värdet oförändrat, men omtolkas för att matcha måltypen.Annars
sourceExpr
trunkeras intervallet så att dettargetType
passar .
> 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
BOOLESK
targetType
Om är en BOOLEAN och sourceExpr
är av typen:
-
Resultatet är av
NULL
typenBOOLEAN
. -
Om
sourceExpr
är:0
: Resultatet ärfalse
.-
NULL
: Resultatet ärNULL
. -
special floating point value
: Resultatet ärtrue
.
Annars blir
true
resultatet .-
-
Om
sourcEexpr
är (skiftlägesokänsligt):-
'T', 'TRUE', 'Y', 'YES', or '1'
: Resultatet ärtrue
-
'F', 'FALSE', 'N', 'NO', or '0'
: Resultatet ärfalse
-
NULL
: Resultatet ärNULL
Annars returnerar Azure Databricks en ogiltig indatasyntax för typen booleskt fel.
Använd try_cast för att omvandla ogiltiga datafel till
NULL
. -
-
Reglerna för typen av det faktiska värdet för
VARIANT
typen gäller.
Exempel
> 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
targetType
Om är binär och sourceExpr
är av typen:
-
Resultatet är av
NULL
typenBINARY
. -
Resultatet är UTF-8-kodningen för
surceExpr
. -
Typreglerna för det faktiska värdet som innehas av
VARIANT
datatypen gäller.
Exempel
> 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
SAMLING
targetType
Om är en <>och sourceExpr
är av typen:
-
Resultatet är en
NULL
avtargeType
. -
Om gjutningen från
sourceElementType
tilltargetElementType
stöds är resultatet ettARRAY<targetElementType>
med alla element gjutnatargetElementType
till .Azure Databricks genererar ett fel om gjutningen inte stöds eller om något av elementen inte kan castas.
Använd try_cast för att omvandla ogiltiga data- eller spillfel till
NULL
. -
Typreglerna för det faktiska värdet som innehas av
VARIANT
datatypen gäller.
Exempel
> 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]
KARTA
targetType
Om är en MAP targetKeyType<, targetValueType > och sourceExpr
är av typen:
-
Resultatet är en
NULL
avtargetType
. MAP <sourceKeyType, sourceValueType >
Om konverteringar från
sourceKeyType
tilltargetKeyType
ochsourceValueType
tilltargetValueType
stöds, är resultatet enMAP<targetKeyType, targetValueType>
med alla nycklar konverterade tilltargetKeyType
och alla värden konverterade tilltargetValueType
.Azure Databricks ger ett felmeddelande om omvandlingen inte stöds eller om någon av nycklarna eller värdena inte kan omvandlas.
Använd try_cast för att omvandla ogiltiga data- eller spillfel till
NULL
.-
Typreglerna för det faktiska värdet som innehas av
VARIANT
datatypen gäller. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Var
sourceFieldName
och en av typernaSTRING
castas tilltargetKeyType
och mappas till en kartnyckel. Varje källfältvärdesourceFieldType
för är gjutettargetValueType
och mappat respektive kartvärde.Azure Databricks genererar ett fel om några avgjutningar inte stöds eller om något av fältvärdena eller nyckelvärdena inte kan gjutas.
Använd try_cast för att omvandla ogiltiga data- eller spillfel till
NULL
.
Exempel
> 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
targetType
Om är en STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > och sourceExpr
är av typen:
-
Resultatet är en
NULL
avtargetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
Kan
sourceExpr
kastas tilltargetType
om alla dessa villkor är sanna:- Källtypen har samma antal fält som målet
- För alla fält:
sourceFieldTypeN
kan castas tilltargetFieldTypeN
. - För alla fältvärden: Källfältvärdet N kan omvandlas till
targetFieldTypeN
och värdet är inte null om målfältet N markeras somNOT NULL
.
sourceFieldName
s, källbegränsningarNOT NULL
och källbegränsningarCOMMENT
behöver inte matchatargetType
och ignoreras.Azure Databricks genererar ett fel om gjutningen inte stöds eller om något av fälten inte kan castas.
Använd try_cast för att omvandla ogiltiga data- eller spillfel till
NULL
.-
Typreglerna för det faktiska värdet som innehas av
VARIANT
datatypen gäller. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Alla
sourceFieldName
matchas medsourceFieldName
s. Varje källfältvärdesourceFieldType
för gjuts till det matchadetargetValueType
och mappade till respektive kartvärde.Om en
targetFieldName
inte matchas ärNULL
fältvärdet .Om en
sourceFieldName
inte matchas ignoreras fältet.Azure Databricks genererar ett fel om några avgjutningar inte stöds eller om något av fältvärdena eller nyckelvärdena inte kan gjutas.
Använd try_cast för att omvandla ogiltiga data- eller spillfel till
NULL
.
Exempel
> 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
targetType
Om är en VARIANT och sourceExpr
är av typen:
-
Resultatet är av
NULL
typenVARIANT
. -
Resultatet är ett
VARIANT
, som representerar det numeriska värdet. Precisionen förDECIMAL
typer måste vara <= 38.Alla numeriska integraler mappas till
BIGINT
.Alla
DECIMAL
-värden mappas till sin minsta precision och skala. -
Resultatet är en
VARIANT
, som representerarSTRING
värdet. -
Resultatet är en
VARIANT
, som representerarDATE
värdet. -
Resultatet är en
VARIANT
, som representerarTIMESTAMP
värdet. -
Resultatet är en
VARIANT
, som representerarTIMESTAMP NTZ
värdet. -
Resultatet är en
VARIANT
, som representerarBOOLEAN
värdet. -
Resultatet är en
VARIANT
, som representerarBINARY
värdet. -
Om gjutningen från
sourceElementType
tillVARIANT
stöds ärVARIANT
resultatet , som representerarARRAY<sourceElementType>
.Azure Databricks genererar ett fel om casten inte stöds.
Använd try_cast för att omvandla ogiltiga data- eller spillfel till
NULL
.
Exempel
> SELECT cast(NULL AS VARIANT);
NULL
> SELECT cast(5.1000 AS VARIANT);
5.1
> SELECT schema_of_variant(cast(5 AS VARIANT));
BIGINT