Tous les produits
Search
Centre de documentation

MaxCompute:Conversion des types de données

Dernière mise à jour :Aug 25, 2026

MaxCompute SQL permet la conversion entre différents types de données. Ces conversions peuvent être explicites ou implicites.

Conversion explicite

Une conversion explicite utilise la fonction CAST pour convertir une valeur d'un type de données vers un autre. Le tableau suivant présente les conversions explicites prises en charge par MaxCompute SQL. Pour plus d'informations sur cette fonction, consultez CAST.

De/vers

BIGINT

DOUBLE

STRING

DATETIME

BOOLEAN

DECIMAL

FLOAT

BIGINT

N/A

O

O

N

O

O

O

DOUBLE

O

N/A

O

N

O

O

O

STRING

O

O

N/A

O

O

O

O

DATETIME

N

N

O

N/A

N

N

N

BOOLEAN

O

O

O

N

N/A

O

O

DECIMAL

O

O

O

N

O

N/A

O

FLOAT

O

O

O

N

O

O

N/A

Dans ce tableau, O indique que la conversion est prise en charge, N qu'elle ne l'est pas, et N/A signifie qu'aucune conversion n'est nécessaire. Toute tentative de conversion explicite non prise en charge renvoie une erreur.

  • Exemple de données

    Remarque

    Les exemples suivants utilisent une table user contenant ces données d'exemple.

    create table if not exists user (
      user_name string,
    	user_id bigint,
    	age bigint   
    );
    insert into user values ('zhangsan',111,20);
  • Exemples

    SELECT CAST(user_id AS DOUBLE) AS new_id from user;
    SELECT CAST('2015-10-01 00:00:00' AS DATETIME) AS new_date;
    SELECT CAST(ARRAY(1,2,3) AS ARRAY<STRING>);
    SELECT CONCAT_WS(',', CAST(ARRAY(1, 2) AS ARRAY<STRING>));

Remarques et limitations d'utilisation

  • Lorsque vous convertissez un type DOUBLE en BIGINT, la partie décimale est tronquée. Par exemple, CAST(1.6 AS BIGINT) = 1.

  • La conversion d'une STRING au format DOUBLE vers BIGINT passe d'abord par le type DOUBLE, puis vers BIGINT, ce qui entraîne la troncature de la partie décimale. Par exemple, CAST("1.6" AS BIGINT) = 1.

  • Il est possible de convertir une STRING au format BIGINT en DOUBLE. Le résultat comporte alors une décimale. Par exemple, CAST("1" AS DOUBLE) = 1.0.

  • Les conversions vers le type DATETIME utilisent le format par défaut yyyy-mm-dd hh:mi:ss.

  • Des fonctions intégrées permettent de convertir certains types de données qui ne supportent pas la conversion explicite directe. Ainsi, la fonction TO_CHAR convertit une valeur BOOLEAN en STRING. Pour plus de détails, consultez TO_CHAR. La fonction TO_DATE permet également de convertir une valeur STRING en DATETIME. Voir TO_DATE pour plus d'informations.

  • Si la plage de valeurs d'un DECIMAL est dépassée, l'opération CAST STRING TO DECIMAL peut provoquer des erreurs de dépassement ou une troncature des données.

  • La conversion explicite d'un DECIMAL en DOUBLE ou FLOAT peut entraîner une perte de précision. Pour les scénarios nécessitant une haute précision, tels que les calculs monétaires, il est recommandé d'utiliser le type DECIMAL.

  • MaxCompute prend en charge les conversions de types pour les types de données complexes. Pour les conversions implicites et explicites d'un type complexe, ses sous-types doivent également être convertibles. Lors de la conversion d'un STRUCT, les noms des champs n'ont pas besoin de correspondre, mais leur nombre doit être identique et les champs correspondants doivent être implicitement ou explicitement convertibles. Exemples :

    • ARRAY<BIGINT> peut être converti implicitement ou explicitement en ARRAY<STRING>.

    • ARRAY<BIGINT> peut être converti explicitement en ARRAY<INT>, mais pas implicitement.

    • ARRAY<BIGINT> ne peut être converti ni implicitement ni explicitement en ARRAY<DATETIME>.

    • STRUCT<a:BIGINT,b:INT> peut être converti implicitement en STRUCT<col1:STRING,col2:BIGINT>, mais ni implicitement ni explicitement en STRUCT<a:STRING>.

Conversion implicite et son champ d'application

Une conversion implicite est une opération effectuée automatiquement par MaxCompute à l'exécution, selon le contexte et les règles de conversion. Les tableaux ci-dessous présentent les conversions implicites prises en charge par MaxCompute.

De/Vers

BOOLEAN

TINYINT

SMALLINT

INT

BIGINT

FLOAT

BOOLEAN

N/A

N

N

N

N

N

TINYINT

N

N/A

O

O

O

O

SMALLINT

N

N

N/A

O

O

O

INT

N

N

O

N/A

O

O

BIGINT

N

N

N

N

N/A

O

FLOAT

N

N

N

N

O

N/A

De/vers

DOUBLE

DECIMAL

STRING

VARCHAR

TIMESTAMP

BINARY

DOUBLE

N/A

O

O

O

N

N

DECIMAL

N

N/A

O

O

N

N

STRING

O

O

N/A

O

N

N

VARCHAR

O

O

O

N/A

N

N

TIMESTAMP

N

N

O

O

N/A

N

BINARY

N

N

N

N

N

N/A

Dans ces tableaux, O signifie que la conversion est prise en charge, N qu'elle ne l'est pas, et N/A qu'aucune conversion n'est requise. MaxCompute renvoie une erreur en cas de conversion implicite non prise en charge ou d'échec de conversion à l'exécution.

Remarque
  • MaxCompute 2.0 introduit des définitions de constantes pour les types DECIMAL et DATETIME. Par exemple, 100BD est une constante DECIMAL de valeur 100, et 2017-11-11 00:00:00 est une constante DATETIME. Vous pouvez utiliser ces constantes directement dans les clauses VALUES et les tables.

  • Comme MaxCompute effectue automatiquement les conversions implicites selon le contexte, il est recommandé d'utiliser CAST pour les conversions explicites lorsque les types de données ne correspondent pas.

  • Les règles de conversion implicite s'appliquent uniquement dans un périmètre spécifique. Dans certains contextes, seul un sous-ensemble de ces règles est applicable.

Exemple

SELECT user_id+age+'12345', CONCAT(user_name,user_id,age) FROM user;

Les règles de conversion implicite varient selon l'opérateur utilisé :

  • Conversion implicite avec les opérateurs relationnels

    Les opérateurs relationnels incluent =, <>, <, <=, >, >=, IS NULL, IS NOT NULL, LIKE, RLIKE, and IN. Les règles de conversion implicite pour LIKE, RLIKE, and IN diffèrent de celles des autres opérateurs relationnels et sont décrites séparément. Les règles présentées dans cette section ne s'appliquent pas à ces trois opérateurs.

    Lorsqu'une opération relationnelle implique différents types de données, ceux-ci sont convertis implicitement selon les règles suivantes.

    De/vers

    BIGINT

    DOUBLE

    STRING

    DATETIME

    BOOLEAN

    DECIMAL

    BIGINT

    N/A

    DOUBLE

    DOUBLE

    N

    N

    DECIMAL

    DOUBLE

    DOUBLE

    N/A

    DOUBLE

    N

    N

    DECIMAL

    STRING

    DOUBLE

    DOUBLE

    N/A

    DATETIME

    N

    DECIMAL

    DATETIME

    N

    N

    DATETIME

    N/A

    N

    N

    BOOLEAN

    N

    N

    N

    N

    N/A

    N

    DECIMAL

    DECIMAL

    DECIMAL

    DECIMAL

    N

    N

    N/A

    Remarque
    • Si les deux types de données comparés ne peuvent pas être convertis implicitement, l'opération relationnelle échoue et renvoie une erreur.

    • Pour plus d'informations sur les opérateurs relationnels, consultez Operators.

  • Conversion implicite avec les opérateurs relationnels spéciaux

    Les opérateurs relationnels spéciaux incluent LIKE, RLIKE, and IN.

    • La syntaxe pour LIKE et RLIKE est la suivante :

      source LIKE pattern;  
      source RLIKE pattern;
      Remarque
      • Les paramètres source et pattern pour LIKE et RLIKE doivent être de type STRING.

      • Les autres types de données ne sont pas autorisés et ne sont pas convertis implicitement en STRING pour cette opération.

    • La syntaxe pour IN est la suivante :

      key IN (value1, value2, …)
      Remarque
      • Dans une expression IN, toutes les valeurs de la liste doivent avoir le même type de données.

      • Lors de la comparaison de la clé avec les valeurs, si les types incluent BIGINT, DOUBLE et STRING, il est recommandé de tous les convertir en DOUBLE. Si les types incluent DATETIME et STRING, il est recommandé de tous les convertir en DATETIME. Aucune autre conversion de type n'est autorisée.

  • Conversion implicite avec les opérateurs arithmétiques

    Les opérateurs arithmétiques incluent +, -, *, /, and %. Leurs règles de conversion implicite sont les suivantes :

    • Seuls les types STRING, BIGINT, DOUBLE et DECIMAL peuvent être utilisés dans les opérations arithmétiques.

    • Les valeurs STRING sont implicitement converties en DOUBLE avant l'opération.

    • Le type BIGINT est implicitement converti en DOUBLE lorsqu'il est utilisé dans des calculs avec DOUBLE.

    • Les types DATETIME et BOOLEAN ne peuvent pas être utilisés dans les opérations arithmétiques.

  • Conversion implicite avec les opérateurs logiques

    Les opérateurs logiques incluent and, or, and not. Leurs règles de conversion implicite sont les suivantes :

    • Seules les valeurs BOOLEAN peuvent être utilisées dans les opérations logiques.

    • Les autres types de données ne peuvent pas être utilisés dans les opérations logiques et ne peuvent pas être convertis implicitement à cette fin.

Conversion implicite dans les fonctions intégrées

MaxCompute SQL propose un large éventail de fonctions intégrées permettant d'effectuer des calculs sur une ou plusieurs colonnes de n'importe quelle ligne et de renvoyer divers types de données. Leurs règles de conversion implicite sont les suivantes :

  • Lors de l'appel d'une fonction, si le type de données d'un paramètre d'entrée ne correspond pas au type défini pour ce paramètre, celui-ci est converti implicitement vers le type requis.

  • Les règles de conversion implicite varient pour chaque fonction intégrée de MaxCompute SQL .

Conversion implicite dans les expressions CASE WHEN

Pour plus d'informations sur les expressions CASE WHEN, consultez CASE WHEN expression. Les règles de conversion implicite sont les suivantes :

  • Si les types de retour incluent uniquement BIGINT et DOUBLE, tous sont convertis en DOUBLE.

  • Si l'une des valeurs de retour potentielles est une STRING, toutes les valeurs de retour sont converties en STRING. Si un type, tel que BOOLEAN, ne peut pas être converti, une erreur est renvoyée.

  • Aucune autre conversion de type n'est autorisée.

Conversion entre STRING et DATETIME

MaxCompute prend en charge les conversions entre les types STRING et DATETIME. Le format yyyy-mm-dd hh:mi:ss est utilisé pour ces conversions.

Unité

Chaîne de format

Plage de valeurs

Année

yyyy

0001-9999

Mois

mm

01-12

Jour

dd

01-28

29

30

31

Heure

hh

00-23

Minute

mi

00-59

Seconde

ss

00-59

Remarque
  • Si la valeur d'une unité est constituée d'un seul chiffre, le zéro initial ne peut pas être omis. Par exemple, 2014-1-9 12:12:12 est un format DATETIME invalide et ne peut pas être converti de STRING en DATETIME. Vous devez l'écrire sous la forme 2014-01-09 12:12:12.

  • Une STRING ne peut être convertie en DATETIME que si la chaîne correspond au format décrit ci-dessus. Par exemple, CAST("2013-12-31 02:34:34" AS DATETIME) convertit la STRING 2013-12-31 02:34:34 au type DATETIME. De même, lorsqu'une valeur DATETIME est convertie en STRING, elle adopte par défaut le format yyyy-mm-dd hh:mi:ss.

MaxCompute fournit la fonction TO_DATE, qui permet de convertir des valeurs STRING ne correspondant pas au format de date par défaut vers le type DATETIME. Pour plus d'informations, consultez TO_DATE.