Fonction cast
S’applique à : Databricks SQL Databricks Runtime
Caste la valeur expr
vers le type de données cible type
. Cet opérateur est un synonyme de l’opérateur :: (signe deux-points deux-points)
Syntaxe
cast(sourceExpr AS targetType)
Arguments
sourceExpr
: toute expression castable.targetType
: Le type de données du résultat.
Retours
Le résultat est de type targetType
.
Les combinaisons suivantes de cast de type de données sont valides :
Source (ligne) Cible (colonne) | VOID | numeric | STRING | DATE | TIMESTAMP | TIMESTAMP_NTZ | intervalle année-mois | intervalle jour-heure | BOOLEAN | BINARY | ARRAY | MAP | STRUCT | VARIANT | OBJECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | O | O | O | O | O | O | O | O | O | O | O | O | O | O | N |
numeric | N | O | O | N | Y | N | O | O | O | N | N | N | N | Y | N |
STRING | N | O | O | O | O | O | O | O | O | O | N | N | N | Y | N |
DATE | N | N | O | O | O | O | N | N | N | N | N | N | N | Y | N |
TIMESTAMP | N | O | O | O | O | O | N | N | N | N | N | N | N | Y | N |
TIMESTAMP_NTZ | N | N | O | O | O | O | N | N | N | N | N | N | N | Y | N |
intervalle année-mois | N | O | O | N | N | N | Y | N | N | N | N | N | N | N | N |
intervalle jour-heure | N | O | O | N | N | N | N | Y | N | N | N | N | N | N | N |
BOOLEAN | N | O | O | N | Y | N | N | N | Y | N | N | N | N | Y | N |
BINARY | N | O | O | 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 |
MAP | 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 | O | O | O | O | O | N | N | O | O | O | O | O | O | N |
OBJECT | N | N | N | N | N | N | N | N | N | N | N | O | O | N | N |
Règles et limitations basées sur targetType
Avertissement
Dans Databricks Runtime, si spark.sql.ansi.enabled est false
, un dépassement de capacité ne provoque pas d’erreur, mais « enveloppe » le résultat.
Une valeur sourceExpr
avec un format non valide ou des caractères non valides pour targetType
donnera lieu à un NULL
.
numeric
Si targetType
est un numérique et que sourceExpr
est de type :
-
Le résultat est un
NULL
du type numérique spécifié. -
Si
targetType
est un numérique entier, le résultat estsourceExpr
tronqué à un nombre entier.Sinon, le résultat est
sourceExpr
arrondi à une échelle disponible detargetType
.Si la valeur est en dehors de l’intervalle
targetType
, une erreur de dépassement est levée.Utilisez try_cast pour transformer les erreurs de dépassement en
NULL
. -
sourceExpr
est lu comme une valeur littérale detargetType
.Si
sourceExpr
ne respecte pas le format des valeurs littérales, une erreur est levée.Si la valeur est en dehors de la plage
targetType
, une erreur de dépassement est levée.Utilisez try_cast pour transformer les erreurs de débordement et de format non valide en
NULL
. -
Le résultat est le nombre de secondes écoulées entre
1970-01-01 00:00:00 UTC
etsourceExpr
.Si
targetType
est un numérique entier, le résultat est tronqué à un nombre entier.Sinon, le résultat est arrondi à une échelle disponible de
targetType
.Si le résultat est en dehors de l’intervalle
targetType
, une erreur de dépassement est levée.Utilisez try_cast pour transformer les erreurs de dépassement en
NULL
. -
S’applique à : Databricks SQL Databricks Runtime 11.3 LTS et ultérieur
Le type de cible doit être un numérique exact.
Pour un
INTERVAL upper_unit TO lower_unit
donné, le résultat est mesuré en nombre total delower_unit
. Silower_unit
estSECOND
, les fractions de seconde sont stockées à droite du point décimal. Pour tous les autres intervalles, le résultat est toujours un nombre intégral. -
Si
sourceExpr
est :true
: Le résultat est 1.false
: Le résultat est 0.NULL
: Le résultat estNULL
.
-
Les règles du type de la valeur réelle du type
VARIANT
s’appliquent.
Exemples
> 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
Si targetType
est de type STRING et que sourceExpr
est de type :
-
Le résultat est une chaîne
NULL
. -
Le résultat est le nombre littéral avec un signe moins facultatif et aucun zéro de début à l’exception du chiffre unique à gauche de la virgule décimale. Si
targetType
estDECIMAL(p, s)
avecs
supérieur à 0, un point décimal est ajouté et les zéros de queue sont ajoutés à l’échelle. -
Si le nombre absolu est inférieur à
10,000,000
et supérieur ou égal à0.001
, le résultat est exprimé sans notation scientifique avec au moins un chiffre de part et d’autre de la virgule.Sinon, Azure Databricks utilise une mantisse suivie de
E
et d’un exposant. La mantisse comporte un signe moins de tête facultatif, suivi d’un chiffre à gauche de la virgule, et du nombre minimal de chiffres supérieurs à zéro à droite. L’exposant a un signe moins de début facultatif. -
Si l’année est comprise entre 9999 BCE et 9999 CE, le résultat est un dateString de la forme
-YYYY-MM-DD
etYYYY-MM-DD
respectivement.Pour les années avant ou après cette plage, le nombre nécessaire de chiffres est ajouté au composant d’année et
+
est utilisé pour CE. -
Si l’année est comprise entre 9999 BCE et 9999 CE, le résultat est un timestampString de la forme
-YYYY-MM-DD hh:mm:ss
etYYYY-MM-DD hh:mm:ss
respectivement.Pour les années avant ou après cette plage, le nombre nécessaire de chiffres est ajouté au composant d’année et
+
est utilisé pour CE.Les secondes fractionnaires
.f...
sont ajoutées si nécessaire. -
Si l’année est comprise entre 9999 BCE et 9999 CE, le résultat est un timestampString de la forme
-YYYY-MM-DD hh:mm:ss
etYYYY-MM-DD hh:mm:ss
respectivement.Pour les années avant ou après cette plage, le nombre nécessaire de chiffres est ajouté au composant d’année et
+
est utilisé pour CE.Les secondes fractionnaires
.f...
sont ajoutées si nécessaire. -
Le résultat est sa représentation la plus courte du littéral d’intervalle. Si l’intervalle est négatif, le signe est incorporé dans
interval-string
. Pour les unités inférieures à 10, les zéros de gauche sont omis.Une chaîne d’intervalle d’année standard a la forme suivante :
INTERVAL 'Y' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
-
Le résultat est sa représentation la plus courte du littéral d’intervalle. Si l’intervalle est négatif, le signe est incorporé dans
interval-string
. Pour les unités inférieures à 10, les zéros de gauche sont omis.Une chaîne d’intervalle de jour-heure standard a la forme suivante :
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
-
Le résultat de la valeur booléenne
true
est le littéralSTRING
true
. Pourfalse
, il s’agit du littéral de chaînefalse
. PourNULL
, il s’agit de la chaîne nulle. -
Un résultat est le binaire
sourceExpr
interprété comme une séquence de caractères UTF-8.Azure Databricks ne valide pas les caractères UTF-8. Un cast de
BINARY
versSTRING
n’injectera jamais de caractères de substitution et ne provoquera pas d’erreur. -
Le résultat est une liste d’éléments de cast séparés par des virgules, qui est encadrée par des crochets
[ ]
. Un espace suit chaque virgule. Un élémentNULL
est traduit ennull
littéral.Azure Databricks n’ajoute pas de guillemets ou ne marque pas d’une autre manière les éléments individuels, qui peuvent eux-mêmes contenir des parenthèses ou des virgules.
-
Le résultat est une liste séparée par des virgules de paires de valeurs de clé de cast, entourée d’accolades
{ }
. Un espace suit chaque virgule. Chaque paire clé-valeur est séparée par->
. Une valeur de carteNULL
est traduite ennull
littéral.Azure Databricks n’ajoute pas de guillemets ou ne marque pas d’une autre manière les clés ou valeurs individuelles, qui peuvent eux-mêmes contenir des crochets, des virgules ou des
->
. -
Le résultat est une liste séparée par des virgules de valeurs de champ cast, entourée d’accolades
{ }
. Un espace suit chaque virgule. La valeur d’un champNULL
est convertie en unnull
littéral.Azure Databricks n’ajoute pas de guillemets ou ne marque pas d’une autre manière les champs individuels, qui peuvent eux-mêmes contenir des crochets ou des virgules.
-
Les règles du type de la valeur réelle du type
VARIANT
s’appliquent.
Exemples
> 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
DATE
Si targetType
est un type DATE et que sourceExpr
est de type :
-
Le résultat est un
NULL
DATE
. -
sourceExpr
doit être un dateString valide.Si
sourceExpr
n’est pas validedateString
, Azure Databricks retourne une erreur.Utilisez try_cast pour transformer les erreurs de données non valides en
NULL
. -
Le résultat est la partie date du timestamp
sourceExpr
. -
Le résultat est la partie date du timestamp_ntz
sourceExpr
. -
Les règles de type pour la valeur réelle détenue par le type de données
VARIANT
s’appliquent.
Exemples
> 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
Si targetType
est de type TIMESTAMP est que sourceExpr
est de type :
-
Le résultat est un
NULL
DATE
. -
sourceExpr
est le nombre de secondes écoulées depuis1970-01-01 00:00:00 UTC
.Les fractions inférieures aux microsecondes sont tronquées.
Si la valeur est en dehors de l’intervalle
TIMESTAMP
, une erreur de dépassement est levée.Utilisez try_cast pour transformer les erreurs de dépassement en
NULL
. -
sourceExpr
doit être un timestampString valide.Si
sourceExpr
n’est pas validetimestampString
, Azure Databricks retourne une erreur.Utilisez try_cast pour transformer les erreurs de données non valides en
NULL
. -
Le résultat est le
sourceExpr
DATE
à00:00:00
heures.
Le résultat est une valeur d’horodatage avec les mêmes champs année/mois/jour/heure/minute/seconde que timestamp_ntz sourceExpr
.
-
Les règles de type pour la valeur réelle détenue par le type de données
VARIANT
s’appliquent.
Exemples
> 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
Si targetType
est de type TIMESTAMP_NTZ et que sourceExpr
est de type :
-
Le résultat est un
NULL
DATE
. -
sourceExpr
doit être un timestampString valide.Si
sourceExpr
n’est pas validetimestampString
, Azure Databricks retourne une erreur.Utilisez try_cast pour transformer les erreurs de données non valides en
NULL
. -
Le résultat est la DATE
sourceExpr
à00:00:00
h. -
Le résultat est l’heure locale comme le
sourceExpr
dans le fuseau horaire de la session. -
Les règles de type pour la valeur réelle détenue par le type de données
VARIANT
s’appliquent.
Exemples
> 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
intervalle année-mois
Si targetType
est un intervalle année-mois et que sourceExpr
est de type :
-
Le résultat est un intervalle année-mois
NULL
. -
S’applique à : Databricks SQL Databricks Runtime 11.3 LTS et ultérieur
Le nombre numérique est interprété comme un nombre d’unités inférieures de
targetType
yearmonthIntervalQualifier. -
sourceExpr
doit être un yearMonthIntervalString valide.Si
sourceExpr
n’est pas valideyearMonthIntervalString
, Azure Databricks retourne une erreur.Utilisez try_cast pour transformer les erreurs de données non valides en
NULL
. -
Si
targetType
yearMonthIntervalQualifier inclutMONTH
, la valeur reste inchangée, mais est réinterprétée pour correspondre au type cible.Sinon, si le type source yearMonthIntervalQualifier inclut
MONTH
, le résultat est tronqué à des années complètes.
Exemples
> 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
intervalle jour-heure
Si targetType
est un intervalle jour-heure et que sourceExpr
est de type :
-
Le résultat est un intervalle jour-heure
NULL
. -
S’applique à : Databricks SQL Databricks Runtime 11.3 LTS et ultérieur
Le nombre numérique est interprété comme un nombre d’unités inférieures de
targetType
dayTimeIntervalQualifier. Si l’unité estSECOND
, toutes les fractions sont interprétées comme des fractions de secondes. -
sourceExpr
doit être un dayTimeIntervalString valide.Si
sourceExpr
n’est pas validedayTimeIntervalString
, Azure Databricks retourne une erreur.Utilisez try_cast pour transformer les erreurs de données non valides en
NULL
. -
Si
targetType
dayTimeIntervalQualifier inclut la plus petite unité du type source dayTimeIntervalQualifier, la valeur reste inchangée, mais elle est réinterprétée pour correspondre au type cible.Sinon, l’intervalle
sourceExpr
est tronqué pour tenir dans letargetType
.
> 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
Si la valeur targetType
est BOOLEAN et que sourceExpr
est de type :
-
Le résultat est un
NULL
de typeBOOLEAN
. -
Si
sourceExpr
est :0
: Le résultat estfalse
.NULL
: Le résultat estNULL
.special floating point value
: Le résultat esttrue
.
Sinon, le résultat est
true
.
-
Si
sourcEexpr
ne respecte pas la casse :'T', 'TRUE', 'Y', 'YES', or '1'
: Le résultat esttrue
'F', 'FALSE', 'N', 'NO', or '0'
: Le résultat estfalse
NULL
: Le résultat estNULL
Sinon, Azure Databricks retourne une erreur de syntaxe d’entrée non valide pour le type booléen.
Utilisez try_cast pour transformer les erreurs de données non valides en
NULL
. -
Les règles du type de la valeur réelle du type
VARIANT
s’appliquent.
Exemples
> 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
Si targetType
est un BINARY et que sourceExpr
est de type :
-
Le résultat est un
NULL
de typeBINARY
. -
Le résultat est l’encodage UTF-8 de
surceExpr
. -
Les règles de type pour la valeur réelle détenue par le type de données
VARIANT
s’appliquent.
Exemples
> 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
Si targetType
est un ARRAY < targetElementType > et que sourceExpr
est de type :
-
Le résultat est un
NULL
dutargeType
. -
Si le cast de
sourceElementType
verstargetElementType
est pris en charge, le résultat est unARRAY<targetElementType>
avec tous les éléments convertis entargetElementType
.Azure Databricks génère une erreur si le cast n’est pas pris en charge ou si l’un des éléments ne peut pas être casté.
Utilisez try_cast pour transformer les erreurs de dépassement ou de données non valides en
NULL
. -
Les règles de type pour la valeur réelle détenue par le type de données
VARIANT
s’appliquent.
Exemples
> 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
Si targetType
est un MAP < targetKeyType, targetValueType> et que sourceExpr
est de type :
-
Le résultat est un
NULL
dutargetType
. MAP <sourceKeyType, sourceValueType >
Si les casts de
sourceKeyType
verstargetKeyType
etsourceValueType
verstargetValueType
sont pris en charge, le résultat est unMAP<targetKeyType, targetValueType>
avec toutes les clés converties en valeurstargetKeyType
et toutes les valeurs converties entargetValueType
.Azure Databricks génère une erreur si le cast n’est pas pris en charge ou si l’une des clés ou valeurs ne peut pas être castée.
Utilisez try_cast pour transformer les erreurs de dépassement ou de données non valides en
NULL
.-
Les règles de type pour la valeur réelle détenue par le type de données
VARIANT
s’appliquent. OBJECT < [sourceFieldName : sourceFieldType [, …]] >
Chaque
sourceFieldName
de typeSTRING
est forcé en typetargetKeyType
et mappé à une clé de carte. Chaque valeur de champ source desourceFieldType
est forcée en typetargetValueType
et mappée à la valeur de carte correspondante.Azure Databricks génère une erreur si un forçage de type n’est pas pris en charge ou si le type de l’une des valeurs de champ ou de clé ne peut pas être forcé.
Utilisez try_cast pour transformer les erreurs de dépassement ou de données non valides en
NULL
.
Exemples
> 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
Si la valeur targetType
est un STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, …]] > et que sourceExpr
est de type :
-
Le résultat est un
NULL
dutargetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, …]] >
Le
sourceExpr
peut être forcé entargetType
si toutes ces conditions sont vraies :- Le type source a le même nombre de champs que la cible
- Pour tous les champs :
sourceFieldTypeN
peut être converti entargetFieldTypeN
. - Pour toutes les valeurs de champ : la valeur de champ source N peut être castée en
targetFieldTypeN
et la valeur n’est pas null si le champ cible N est marqué commeNOT NULL
.
Les
sourceFieldName
, les contraintes sourcesNOT NULL
et lesCOMMENT
sources n’ont pas à correspondre àtargetType
et sont ignorés.Azure Databricks génère une erreur si le forçage de type n’est pas pris en charge ou si le type de l’un des champs ne peut pas être forcé.
Utilisez try_cast pour transformer les erreurs de dépassement ou de données non valides en
NULL
.-
Les règles de type pour la valeur réelle détenue par le type de données
VARIANT
s’appliquent. OBJECT < [sourceFieldName : sourceFieldType [, …]] >
Tous les
sourceFieldName
sont mis en correspondance avecsourceFieldName
. Chaque valeur de champ source desourceFieldType
est forcée autargetValueType
correspondant et mappée à la valeur de carte correspondante.Si un
targetFieldName
n’est pas mis en correspondance, la valeur du champ estNULL
.Si un
sourceFieldName
n’est pas mis en correspondance, le champ est ignoré.Azure Databricks génère une erreur si un forçage de type n’est pas pris en charge ou si le type de l’une des valeurs de champ ou de clé ne peut pas être forcé.
Utilisez try_cast pour transformer les erreurs de dépassement ou de données non valides en
NULL
.
Exemples
> 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
Si le targetType
est un VARIANT et sourceExpr
est de type :
-
Le résultat est un
NULL
de typeVARIANT
. -
Le résultat est un
VARIANT
, représentant la valeur numérique. La précision des typesDECIMAL
doit être <= 38.Tous les chiffres entiers sont mappés à
BIGINT
.Toutes les valeurs
DECIMAL
sont mappées à leur précision et à leur échelle les plus étroites. -
Le résultat est un
VARIANT
, représentant la valeurSTRING
. -
Le résultat est un
VARIANT
, représentant la valeurDATE
. -
Le résultat est un
VARIANT
, représentant la valeurTIMESTAMP
. -
Le résultat est un
VARIANT
, représentant la valeurTIMESTAMP NTZ
. -
Le résultat est un
VARIANT
, représentant la valeurBOOLEAN
. -
Le résultat est un
VARIANT
, représentant la valeurBINARY
. -
Si le forçage de type de
sourceElementType
versVARIANT
est pris en charge, le résultat estVARIANT
, représentantARRAY<sourceElementType>
.Azure Databricks génère une erreur si le forçage de type n’est pas pris en charge.
Utilisez try_cast pour transformer les erreurs de dépassement ou de données non valides en
NULL
.
Exemples
> SELECT cast(NULL AS VARIANT);
NULL
> SELECT cast(5.1000 AS VARIANT);
5.1
> SELECT schema_of_variant(cast(5 AS VARIANT));
BIGINT