Todos os produtos
Search
Central de documentação

MaxCompute:Conversão de tipos de dados

Última atualização: Aug 25, 2026

O MaxCompute SQL permite conversões entre diferentes tipos de dados. Essas conversões podem ser explícitas ou implícitas.

Conversão explícita

A conversão explícita usa a função CAST para converter um valor de um tipo de dado em outro. A tabela a seguir mostra as conversões explícitas compatíveis com o MaxCompute SQL. Para obter mais informações sobre essa função, consulte CAST.

De/para

BIGINT

DOUBLE

STRING

DATETIME

BOOLEAN

DECIMAL

FLOAT

BIGINT

N/A

Y

Y

N

Y

Y

Y

DOUBLE

Y

N/A

Y

N

Y

Y

Y

STRING

Y

Y

N/A

Y

Y

Y

Y

DATETIME

N

N

Y

N/A

N

N

N

BOOLEAN

Y

Y

Y

N

N/A

Y

Y

DECIMAL

Y

Y

Y

N

Y

N/A

Y

FLOAT

Y

Y

Y

N

Y

Y

N/A

Nesta tabela, Y indica que há suporte à conversão, N indica que não há suporte e N/A significa que nenhuma conversão é necessária. Tentar uma conversão explícita sem suporte resulta em erro.

  • Dados de exemplo

    Nota

    Os exemplos a seguir usam uma tabela user com estes dados de amostra.

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

    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>));

Notas de uso e limitações

  • Ao converter o tipo DOUBLE para BIGINT, a parte fracionária é truncada. Por exemplo, CAST(1.6 AS BIGINT) = 1.

  • Ao converter uma STRING no formato DOUBLE para BIGINT, o sistema primeiro a converte para DOUBLE e depois para BIGINT, truncando a parte fracionária. Exemplo: CAST("1.6" AS BIGINT) = 1.

  • Converta uma STRING no formato BIGINT para DOUBLE. O resultado terá uma casa decimal. Por exemplo, CAST("1" AS DOUBLE) = 1.0.

  • As conversões para o tipo DATETIME usam o formato padrão yyyy-mm-dd hh:mi:ss.

  • Use funções integradas para converter alguns tipos de dados que não aceitam conversão explícita direta. Por exemplo, use a função TO_CHAR para converter um valor BOOLEAN em STRING. Para mais detalhes, consulte TO_CHAR. A função TO_DATE também converte valores STRING para DATETIME. Consulte TO_DATE para saber mais.

  • Se o intervalo de valores de um DECIMAL for excedido, CAST STRING TO DECIMAL poderá causar problemas como erro de estouro ou truncamento de dados.

  • Converter explicitamente DECIMAL para DOUBLE ou FLOAT pode resultar em perda de precisão. Em cenários que exigem alta precisão, como cálculos monetários, use o tipo DECIMAL.

  • O MaxCompute oferece suporte a conversões de tipo para tipos de dados complexos. Tanto nas conversões implícitas quanto nas explícitas de um tipo complexo, os subtipos também devem ser conversíveis. Ao converter um STRUCT, os nomes dos campos não precisam corresponder, mas a quantidade de campos deve ser igual e os campos correspondentes devem ser conversíveis implícita ou explicitamente. Por exemplo:

    • ARRAY<BIGINT> pode ser convertido implícita ou explicitamente para ARRAY<STRING>.

    • ARRAY<BIGINT> aceita conversão explícita para ARRAY<INT>, mas não permite conversão implícita.

    • Não é possível converter ARRAY<BIGINT> para ARRAY<DATETIME> nem implícita nem explicitamente.

    • STRUCT<a:BIGINT,b:INT> admite conversão implícita para STRUCT<col1:STRING,col2:BIGINT>, porém não pode ser convertido implícita ou explicitamente para STRUCT<a:STRING>.

Conversão implícita e seu escopo

A conversão implícita ocorre automaticamente em tempo de execução no MaxCompute, com base no contexto e nas regras de conversão. As tabelas abaixo mostram as conversões implícitas compatíveis.

De/Para

BOOLEAN

TINYINT

SMALLINT

INT

BIGINT

FLOAT

BOOLEAN

N/A

N

N

N

N

N

TINYINT

N

N/A

Y

Y

Y

Y

SMALLINT

N

N

N/A

Y

Y

Y

INT

N

N

Y

N/A

Y

Y

BIGINT

N

N

N

N

N/A

Y

FLOAT

N

N

N

N

Y

N/A

De/para

DOUBLE

DECIMAL

STRING

VARCHAR

TIMESTAMP

BINARY

DOUBLE

N/A

Y

Y

Y

N

N

DECIMAL

N

N/A

Y

Y

N

N

STRING

Y

Y

N/A

Y

N

N

VARCHAR

Y

Y

Y

N/A

N

N

TIMESTAMP

N

N

Y

Y

N/A

N

BINARY

N

N

N

N

N

N/A

Nessas tabelas, Y indica suporte à conversão, N indica falta de suporte e N/A significa que a conversão é desnecessária. O MaxCompute retorna erro caso uma conversão implícita não tenha suporte ou falhe durante a execução.

Nota
  • O MaxCompute 2.0 introduziu definições de constantes para os tipos DECIMAL e DATETIME. Por exemplo, 100BD é uma constante DECIMAL com valor 100, e 2017-11-11 00:00:00 é uma constante DATETIME. Use essas constantes diretamente em cláusulas VALUES e tabelas.

  • Como o MaxCompute realiza conversões implícitas automaticamente conforme o contexto, use CAST para conversões explícitas quando houver incompatibilidade de tipos de dados.

  • As regras de conversão implícita são válidas apenas dentro de um escopo específico. Em certos contextos, aplica-se apenas um subconjunto dessas regras.

Exemplo

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

As regras de conversão implícita variam conforme o operador:

  • Conversão implícita com operadores relacionais

    Os operadores relacionais incluem =, <>, <, <=, >, >=, IS NULL, IS NOT NULL, LIKE, RLIKE e IN. As regras de conversão implícita para LIKE, RLIKE e IN diferem das demais e têm descrição separada. As regras desta seção não se aplicam a esses três operadores.

    Quando tipos de dados diferentes participam de uma operação relacional, eles são convertidos implicitamente seguindo estas regras:

    De/para

    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

    Nota
    • Se os dois tipos de dados comparados não puderem ser convertidos implicitamente, a operação relacional falhará e retornará um erro.

    • Para mais informações sobre operadores relacionais, consulte Operators.

  • Conversão implícita com operadores relacionais especiais

    Os operadores relacionais especiais incluem LIKE, RLIKE e IN.

    • A sintaxe para LIKE e RLIKE é a seguinte:

      source LIKE pattern;  
      source RLIKE pattern;
      Nota
      • Os parâmetros source e pattern para LIKE e RLIKE devem ser do tipo STRING.

      • Outros tipos de dados não são permitidos e não serão convertidos implicitamente para STRING nesta operação.

    • A sintaxe para IN é a seguinte:

      key IN (value1, value2, …)
      Nota
      • Em uma expressão IN, todos os valores na lista devem ter o mesmo tipo de dado.

      • Ao comparar a chave com os valores, se os tipos incluírem BIGINT, DOUBLE e STRING, converta-os todos para DOUBLE. Se incluírem DATETIME e STRING, converta-os todos para DATETIME. Nenhuma outra conversão de tipo é permitida.

  • Conversão implícita com operadores aritméticos

    Os operadores aritméticos incluem +, -, *, / e %. Suas regras de conversão implícita são:

    • Apenas os tipos STRING, BIGINT, DOUBLE e DECIMAL podem ser usados em operações aritméticas.

    • Valores STRING são convertidos implicitamente para DOUBLE antes da operação.

    • BIGINT é convertido implicitamente para DOUBLE quando usado em cálculos com DOUBLE.

    • Os tipos DATETIME e BOOLEAN não podem ser utilizados em operações aritméticas.

  • Conversão implícita com operadores lógicos

    Os operadores lógicos incluem and, or e not. Suas regras de conversão implícita são:

    • Somente valores BOOLEAN podem ser usados em operações lógicas.

    • Outros tipos de dados não são aceitos em operações lógicas e não podem ser convertidos implicitamente para esse fim.

Conversão implícita em funções integradas

O MaxCompute SQL oferece diversas funções integradas para executar cálculos em uma ou mais colunas de qualquer linha e retornar variados tipos de dados. As regras de conversão implícita são:

  • Ao chamar uma função, se o tipo de dado de um parâmetro de entrada não corresponder ao tipo definido para aquele parâmetro, ele será convertido implicitamente para o tipo necessário.

  • As regras de conversão implícita variam para cada função integrada do MaxCompute SQL .

Conversão implícita em expressões CASE WHEN

Para mais detalhes sobre expressões CASE WHEN, consulte CASE WHEN expression. As regras de conversão implícita são:

  • Se os tipos de retorno incluírem apenas BIGINT e DOUBLE, todos serão convertidos para DOUBLE.

  • Caso algum valor de retorno potencial seja STRING, todos os valores de retorno serão convertidos para STRING. Se um tipo, como BOOLEAN, não puder ser convertido, o sistema retornará um erro.

  • Outras conversões de tipo não são permitidas.

Conversão entre STRING e DATETIME

O MaxCompute oferece suporte a conversões entre os tipos STRING e DATETIME. O formato yyyy-mm-dd hh:mi:ss é utilizado nessas conversões.

Unidade

String de formato

Intervalo de valores

Ano

yyyy

0001-9999

Mês

mm

01-12

Dia

dd

01-28

29

30

31

Hora

hh

00-23

Minuto

mi

00-59

Segundo

ss

00-59

Nota
  • Se o valor de uma unidade tiver apenas um dígito, o zero à esquerda não pode ser omitido. Por exemplo, 2014-1-9 12:12:12 é um formato DATETIME inválido e não pode ser convertido de STRING para DATETIME. Escreva-o como 2014-01-09 12:12:12.

  • Uma STRING só pode ser convertida para DATETIME se corresponder exatamente ao formato descrito acima. Por exemplo, CAST("2013-12-31 02:34:34" AS DATETIME) converte a STRING 2013-12-31 02:34:34 para o tipo DATETIME. Da mesma forma, ao converter um valor DATETIME para STRING, o formato padrão aplicado é yyyy-mm-dd hh:mi:ss.

O MaxCompute fornece a função TO_DATE, que permite converter valores STRING que não correspondem ao formato de data padrão para o tipo DATETIME. Para mais informações, consulte TO_DATE.