Tous les produits
Search
Centre de documentation

MaxCompute:CAST

Dernière mise à jour :Aug 21, 2026

La fonction CAST de MaxCompute convertit le résultat d'une expression vers un type de données cible. Cette rubrique décrit le format de commande, les paramètres et des exemples d'utilisation de la fonction CAST.

Format de la commande

cast(<expr> as <type>)

Description des paramètres

expr : Obligatoire. Les données source à convertir.

type : Obligatoire. Le type de données cible. L'utilisation est la suivante :

  • cast(double as bigint) : Convertit une valeur DOUBLE en valeur BIGINT.

  • cast(string as bigint) : Convertit une chaîne en valeur BIGINT. Si la chaîne représente un entier, la conversion est directe. Si la chaîne représente un nombre à virgule flottante ou un nombre en notation scientifique, elle est d'abord convertie au type DOUBLE, puis au type BIGINT.

  • cast(string as datetime) ou cast(datetime as string) : Le format de date par défaut yyyy-mm-dd hh:mi:ss est utilisé.

  • Conversion entre les types de données de base et les types JSON.

    La fonction CAST prend également en charge les conversions entre le type JSON et les types de données de base, notamment JSON, STRING, BIGINT, INT, TINYINT, SMALLINT, DOUBLE, FLOAT, BOOLEAN et SQL-TYPE. Voici des exemples de commandes :

    • cast(json as string) : Convertit une expression JSON au type STRING. L'expression JSON ne peut pas être un ARRAY ni un OBJECT.

    • cast(string as json) : Convertit une valeur STRING en une expression JSON de type STRING. Cela diffère de json_parse et json_format. json_parse convertit une chaîne JSON valide en une valeur JSON, qui peut être un objet JSON. En revanche, cast(string as json) convertit n'importe quelle chaîne en une chaîne JSON.

    • cast(null as json) : Convertit une valeur NULL au type JSON.

    • cast(json 'null' as ...) : json 'null' et null sont convertis en SQL null.

Description de la valeur de retour

  • Renvoie une valeur du type de données cible.

  • Si vous exécutez setproject odps.function.strictmode=false, la fonction renvoie les chiffres qui apparaissent avant toute lettre.

  • Si vous exécutez setproject odps.function.strictmode=true, une erreur est renvoyée.

  • Lors de la conversion d'une valeur vers le type Decimal :

    • Si vous définissez odps.sql.decimal.tostring.trimzero=true, les zéros non significatifs après la virgule décimale sont supprimés.

    • Si vous définissez odps.sql.decimal.tostring.trimzero=false, les zéros non significatifs après la virgule décimale sont conservés.

      Important

      Le paramètre odps.sql.decimal.tostring.trimzero affecte à la fois les données récupérées depuis les tables et les valeurs statiques.

Exemples d'utilisation

  • Exemple 1 : Utilisation courante.

    --Returns 1.
    select cast('1' as bigint);
  • Exemple 2 : Conversion d'une valeur STRING en valeur BOOLEAN. Si la chaîne STRING est vide, false est renvoyé. Sinon, true est renvoyé.

    • La chaîne STRING est vide.

      select cast("" as boolean);
      --Returns
      +------+
      | _c0  |
      +------+
      | false |
      +------+
    • La chaîne STRING n'est pas vide.

      select cast("false" as boolean);
      --Returns true
      +------+
      | _c0  |
      +------+
      | true |
      +------+
  • Exemple 3 : Conversion d'une chaîne en date.

    --Convert a string to a date.
    select cast("2022-12-20" as date);
    --Returns
    +------------+
    | _c0        |
    +------------+
    | 2022-12-20 |
    +------------+
    
    --Convert a date string with a time part to a date.
    select cast("2022-12-20 00:01:01" as date);
    --Returns
    +------------+
    | _c0        |
    +------------+
    | NULL       |
    +------------+
    --To ensure the value is displayed correctly, set the following parameter:
    set odps.sql.executionengine.enable.string.to.date.full.format= true;
    select cast("2022-12-20 00:01:01" as date);
    --Returns
    +------------+
    | _c0        |
    +------------+
    | 2022-12-20 |
    +------------+
    Remarque

    Par défaut, le paramètre odps.sql.executionengine.enable.string.to.date.full.format est défini sur false. Pour convertir une chaîne de date incluant une partie horaire, définissez ce paramètre sur true.

  • Exemple 4 (Exemple de commande incorrecte) : Utilisation invalide. Une exception est levée si une conversion échoue ou n'est pas prise en charge. La commande suivante illustre une utilisation incorrecte.

    select cast('abc' as bigint);
  • Exemple 5 : Exemple de scénario où setproject odps.function.strictmode=false est défini.

    setprojectodps.function.strictmode=false;
    select cast('123abc'as bigint);
    --Returns
    +------------+
    |_c0|
    +------------+
    |123|
    +------------+
  • Exemple 6 : Exemple de scénario où setproject odps.function.strictmode=true est défini.

    setprojectodps.function.strictmode=true;
    select cast('123abc' as bigint);
    --Returns
    FAILED:ODPS-0130071:[0,0]Semanticanalysisexception-physicalplangenerationfailed:java.lang.NumberFormatException:ODPS-0123091:Illegaltypecast-Infunctioncast,value'123abc'cannotbecastedfromStringtoBigint.
  • Exemple 7 : Exemple de scénario où odps.sql.decimal.tostring.trimzero est défini.

    --Create a table.
    create table mf_dot (dcm1 decimal(38,18),
                         dcm2 decimal(38,18));
    --Insert data.
    insert into table mf_dot values (12.45500BD,12.3400BD);
    
    --When the flag is true or not set.
    set odps.sql.decimal.tostring.trimzero=true;
    --Remove trailing zeros after the decimal point.
    select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
    --Return value
    +------------+------------+
    | _c0        | _c1        |
    +------------+------------+
    | 12.455     | 12.34      |
    +------------+------------+
    
    --When the flag is false.
    set odps.sql.decimal.tostring.trimzero=false;
    --Keep trailing zeros after the decimal point.
    select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
    --Return value
    +------------+------------+
    | _c0        | _c1        |
    +------------+------------+
    | 12.455     | 12.340     |
    +------------+------------+
    
    --This parameter also applies to static values.
    set odps.sql.decimal.tostring.trimzero=false;
    select cast(round(12345.120BD,3) as string);
    --Returns:
    +------------+
    | _c0        |
    +------------+
    | 12345.120  |
    +------------+
  • Exemple 8 : Conversion entre les types STRING et JSON.

    --Convert JSON to string.
    select cast(json '123' as string);
    --Returns:
    +-----+
    | _c0 |
    +-----+
    | 123 |
    +-----+
    
    --Convert JSON to string.
    select cast(json '"abc"' as string);
    --Returns:
    +-----+
    | _c0 |
    +-----+
    | abc |
    +-----+
    
    --Convert JSON to string.
    select cast(json 'true' as string); 
    --Returns:
    +-----+
    | _c0 |
    +-----+
    | TRUE |
    +-----+
    
    --Convert JSON to string.
    select cast(json 'null' as string);
    --Returns:
    +-----+
    | _c0 |
    +-----+
    | NULL |
    +-----+
    
    --Convert string to JSON.
    select cast('{"a":2}' as json); 
    --Returns:
    +-----+
    | _c0 |
    +-----+
    | "{\"a\":2}" |
    +-----+
    
    --Incorrect example of converting JSON to string. Converting JSON expressions of the ARRAY or OBJECT type to string is not supported.
    select cast(json '{"a":2}' as string);
    --An error is returned:
    FAILED: ODPS-0123091:Illegal type cast - Unsupported cast from json array/object to string
  • Exemple 9 : Conversion entre les types NUMBER et JSON.

    --Convert JSON to bigint.
    select cast(json '123' as bigint);
    --Returns:
    +------------+
    | _c0        |
    +------------+
    | 123        |
    +------------+
    
    --Convert JSON to float.
    select cast(json '"1.23"' as float);
    --Returns:
    +------+
    | _c0  |
    +------+
    | 1.23 |
    +------+
    
    --Convert JSON to double.
    select cast(json '1.23' as double);
    --Returns:
    +------------+
    | _c0        |
    +------------+
    | 1.23       |
    +------------+
    
    --Convert int to JSON.
    select cast(123 as json);
    --Returns:
    +-----+
    | _c0 |
    +-----+
    | 123 |
    +-----+
    
    --Convert float to JSON.
    select cast(1.23 as json);
    --Returns:
    +-----+
    | _c0 |
    +-----+
    | 1.23 |
    +-----+
  • Exemple 10 : Conversion entre les types BOOLEAN et JSON.

    --Convert boolean to JSON.
    select cast(true as json);
    --Returns:
    +-----+
    | _c0 |
    +-----+
    | true |
    +-----+
    
    --Convert JSON to boolean.
    select cast(json 'false' as boolean);
    --Returns:
    +------+
    | _c0  |
    +------+
    | false |
    +------+
    
    --Convert JSON to boolean.
    select cast(json '"abc"' as boolean);
    --Returns:
    +------+
    | _c0  |
    +------+
    | true |
    +------+
    
    --ARRAY or OBJECT cannot be converted to boolean.
    select cast(json '[1,2]' as boolean);
    --An error is returned:
    Unsupported cast from json array/object to boolean
  • Exemple 11 : Conversion entre les types NULL et JSON.

    --Convert null to JSON.
    select json_type(cast(null as json));
    --Returns:
    +-----+
    | _c0 |
    +-----+
    | NULL |
    +-----+

Fonctions associées

La fonction CAST est une fonction de type complexe. Pour plus d'informations sur les fonctions qui traitent les types de données complexes tels que ARRAY, MAP, STRUCT et JSON, consultez Fonctions de type complexe.

La fonction CAST est également classée comme un autre type de fonction. Pour plus d'informations sur les fonctions destinées à d'autres scénarios métier, consultez Autres fonctions.