Use CAST para converter um valor de um tipo de dados para outro no AnalyticDB for MySQL.
Sintaxe
CAST(expr AS type)
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Valor ou expressão source a converter |
|
|
Sim |
Tipo de dados de destino |
Conversões suportadas
A tabela a seguir lista os tipos de destino compatíveis com CAST e os tipos source aceitos por cada um.
|
Tipo de destino |
Tipos source aceitos |
|
BOOLEAN |
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, TINYINT, BIGINT, DOUBLE, VARCHAR, JSON |
|
DECIMAL(M,D), FLOAT, INT, INTEGER, SMALLINT, TINYINT |
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, TINYINT, BIGINT, DOUBLE, VARCHAR, JSON |
|
BIGINT |
BOOLEAN, DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, TINYINT, DOUBLE, DATE, DATETIME, TIMESTAMP, TIME, VARCHAR |
|
DOUBLE |
BOOLEAN, DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, TINYINT, BIGINT, DATE, DATETIME, TIMESTAMP, TIME, VARCHAR, JSON |
|
DATE, DATETIME, TIMESTAMP, TIME |
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, TINYINT, BIGINT, DOUBLE, DATE, DATETIME, TIMESTAMP, TIME, VARCHAR, JSON |
|
VARBINARY |
BOOLEAN, DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, TINYINT, BIGINT, DOUBLE, DATE, DATETIME, TIMESTAMP, TIME, VARCHAR, JSON |
|
VARCHAR |
BOOLEAN, DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, TINYINT, BIGINT, DOUBLE, DATE, DATETIME, TIMESTAMP, TIME, VARBINARY, MAP, JSON |
|
ARRAY\ |
VARCHAR, JSON |
|
MAP\ |
VARCHAR |
|
JSON |
BOOLEAN, DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, TINYINT, BIGINT, DOUBLE, VARCHAR, ARRAY |
A conversão de VARBINARY para VARCHAR exige o AnalyticDB for MySQL V3.1.4 ou posterior.
Comportamento em caso de falha na conversão
O resultado de uma falha na conversão depende dos tipos source e de destino.
|
Cenário |
Resultado |
|
Valor VARCHAR ou BIGINT incompatível com o formato TIME |
NULL |
|
Valor fora do intervalo convertido para tipo numérico (exceto grupo INT) |
NULL |
|
VARCHAR não numérico convertido para DECIMAL(M,D) ou FLOAT |
NULL |
|
JSON não numérico convertido para BIGINT ou DOUBLE |
NULL |
|
VARCHAR em formato inválido convertido para JSON |
NULL |
|
Valor fora do intervalo convertido para INT/INTEGER, SMALLINT ou TINYINT |
NULL |
|
VARCHAR não numérico convertido para INT/INTEGER, SMALLINT ou TINYINT |
0 |
|
JSON não numérico convertido para INT/INTEGER, SMALLINT ou TINYINT |
Erro |
|
Valor em formato inválido convertido para ARRAY |
Erro |
|
Valor em formato inválido convertido para MAP |
Erro |
CAST AS BOOLEAN
CAST(expr AS BOOLEAN)
Converte expr para BOOLEAN. O resultado é sempre 1 (verdadeiro) ou 0 (falso).
Regras de conversão
|
Tipo source |
Regra |
|
VARCHAR, JSON |
|
|
DOUBLE |
Diferente de |
|
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, TINYINT, BIGINT |
Diferente de zero → |
Exemplos
-- Cast VARCHAR '1' to BOOLEAN
SELECT CAST('1' AS BOOLEAN);
+----------------------+
| CAST('1' AS BOOLEAN) |
+----------------------+
| 1 |
+----------------------+
-- Non-boolean string returns NULL
SELECT CAST('a' AS BOOLEAN);
NULL
-- Non-zero DOUBLE returns 1
SELECT CAST(4.3 AS BOOLEAN);
+----------------------+
| CAST(4.3 AS BOOLEAN) |
+----------------------+
| 1 |
+----------------------+
-- Non-zero INT returns 1
SELECT CAST(5 AS BOOLEAN);
+--------------------+
| CAST(5 AS BOOLEAN) |
+--------------------+
| 1 |
+--------------------+
CAST AS DECIMAL(M,D)|FLOAT|INT|INTEGER|SMALLINT|TINYINT
CAST(expr AS [DECIMAL(M,D)|FLOAT|INT|INTEGER|SMALLINT|TINYINT])
Converte expr para um dos tipos numéricos: DECIMAL(M,D), FLOAT, INT, INTEGER, SMALLINT ou TINYINT.
Regras de conversão
-
Valores fora do intervalo retornam NULL. Por exemplo,
99999999excede o intervalo do SMALLINT:SELECT CAST(99999999 AS SMALLINT);NULL -
Conversões de alta precisão para baixa precisão arredondam o valor:
SELECT CAST(1.23456789 AS FLOAT);+---------------------------+ | CAST(1.23456789 AS FLOAT) | +---------------------------+ | 1.2345679 | +---------------------------+ -
Converter DECIMAL(M,D), DOUBLE ou FLOAT para INT/INTEGER, SMALLINT ou TINYINT arredonda o valor:
SELECT CAST(1.1342 AS INT);+---------------------+ | CAST(1.1342 AS INT) | +---------------------+ | 1 | +---------------------+ -
Converter VARCHAR não numérico para DECIMAL(M,D) ou FLOAT retorna NULL:
SELECT CAST('China' AS DECIMAL(5,2));NULL -
Converter VARCHAR não numérico para INT/INTEGER, SMALLINT ou TINYINT retorna
0:SELECT CAST('China' AS SMALLINT);+---------------------------+ | CAST('China' AS SMALLINT) | +---------------------------+ | 0 | +---------------------------+ -
Converter JSON não numérico para INT/INTEGER, SMALLINT ou TINYINT gera erro:
SELECT CAST(CAST('[1,2,3]' AS JSON) AS SMALLINT);ERROR 1815 (HY000): [20034, 2021091814103119216818804803453190138] : Cannot cast json to smallint
Exemplo
SELECT CAST(2001012 AS FLOAT);
+------------------------+
| CAST(2001012 AS FLOAT) |
+------------------------+
| 2001012.0|
+------------------------+
CAST AS BIGINT
CAST(expr AS BIGINT)
Converte expr para o tipo BIGINT.
Regras de conversão
-
VARCHAR não numérico retorna
0:SELECT CAST('a' AS BIGINT);+---------------------+ | CAST('a' AS BIGINT) | +---------------------+ | 0 | +---------------------+ -
Valores FLOAT, DOUBLE ou DECIMAL(M,D) são arredondados:
SELECT CAST(1.23456789 AS BIGINT);+----------------------------+ | CAST(1.23456789 AS BIGINT) | +----------------------------+ | 1 | +----------------------------+ -
JSON não numérico retorna NULL:
SELECT CAST(JSON'{}' AS BIGINT);NULL
Exemplos
-- DATE to BIGINT: returns the date as an integer in YYYYMMDD format
SELECT CAST(DATE '2021-09-18' AS BIGINT);
+-----------------------------------+
| CAST(DATE '2021-09-18' AS BIGINT) |
+-----------------------------------+
| 20210918 |
+-----------------------------------+
-- JSON numeric value to BIGINT
SELECT CAST(JSON '-1' AS BIGINT);
+---------------------------+
| CAST(JSON '-1' AS BIGINT) |
+---------------------------+
| -1 |
+---------------------------+
-- Expression result to BIGINT
SELECT CAST(FLOOR(4/5) AS BIGINT);
+----------------------------+
| CAST(FLOOR(4/5) AS BIGINT) |
+----------------------------+
| 0 |
+----------------------------+
CAST AS DOUBLE
CAST(expr AS DOUBLE)
Converte expr para o tipo DOUBLE.
Regras de conversão
-
VARCHAR não numérico retorna
0.0:SELECT CAST('China' AS DOUBLE);+--------------------------+ | CAST('China' AS DOUBLE) | +--------------------------+ | 0.0 | +--------------------------+ -
JSON não numérico retorna NULL:
SELECT CAST(JSON '{}' AS DOUBLE);NULL
Exemplo
-- DATE to DOUBLE: returns the date as a floating-point number
SELECT CAST(DATE '2021-09-17' AS DOUBLE);
+------------------------------------+
| CAST(DATE '2021-09-17' AS DOUBLE) |
+------------------------------------+
| 2.0210917E7 |
+------------------------------------+
CAST AS DATE|DATETIME|TIMESTAMP|TIME
CAST(expr AS DATE|DATETIME|TIMESTAMP|TIME)
Converte expr para DATE, DATETIME, TIMESTAMP ou TIME.
Regras de conversão
-
VARCHAR ou BIGINT incompatível com o formato TIME retorna NULL:
SELECT CAST('a' AS TIME);+-------------------+ | CAST('a' AS TIME) | +-------------------+ | NULL | +-------------------+ -
A ausência do componente de hora assume o padrão
00:00:00:SELECT CAST(TIMESTAMP '2001-1-22' AS TIME);+-------------------------------------+ | CAST(TIMESTAMP '2001-1-22' AS TIME) | +-------------------------------------+ | 00:00:00 | +-------------------------------------+ -
A ausência do componente de data assume a data do sistema no momento da execução da consulta:
SELECT CAST(TIME '00:00:00' AS DATE);+-------------------------------+ | CAST(TIME '00:00:00' AS DATE) | +-------------------------------+ | 2021-09-14 | +-------------------------------+
Exemplo
-- BIGINT to DATE
SELECT CAST(20010122000000 AS DATE);
+------------------------------+
| CAST(20010122000000 AS DATE) |
+------------------------------+
| 2001-01-22 |
+------------------------------+
CAST AS VARBINARY
CAST(expr AS VARBINARY)
Converte expr para o tipo VARBINARY. Para ler o resultado como string, aninhe outro CAST para VARCHAR.
Exemplo
SELECT CAST(CAST('CHINA' AS VARBINARY) AS VARCHAR);
+---------------------------------------------+
| CAST(CAST('CHINA' AS VARBINARY) AS VARCHAR) |
+---------------------------------------------+
| CHINA |
+---------------------------------------------+
CAST AS VARCHAR
CAST(expr AS VARCHAR)
Converte expr para o tipo VARCHAR.
A conversão de VARBINARY para VARCHAR exige o AnalyticDB for MySQL V3.1.4 ou posterior.
Exemplo
SELECT CAST(TIMESTAMP '2001-1-22 00:00:00' AS VARCHAR);
+-------------------------------------------------+
| CAST(TIMESTAMP '2001-1-22 00:00:00' AS VARCHAR) |
+-------------------------------------------------+
| 2001-01-22 00:00:00 |
+-------------------------------------------------+
CAST AS ARRAY
CAST(expr AS ARRAY<element_type>)
Converte expr para um array cujos elementos são do tipo element_type.
|
Parâmetro |
Valores aceitos |
|
|
VARCHAR, JSON |
|
|
TINYINT, SMALLINT, INT/INTEGER, FLOAT |
Regras de conversão
Se expr não estiver em conformidade com o formato ARRAY, o sistema retornará erro:
SELECT CAST('{}}' AS ARRAY<float>);
ERROR 1815 (HY000): [30013, 2021091815372119216818804803453204662] : Value cannot be cast to array(real)
Exemplo
SELECT CAST(JSON '[1,2,3]' AS ARRAY<int>);
+------------------------------------+
| CAST(JSON '[1,2,3]' AS ARRAY<int>) |
+------------------------------------+
| [1,2,3] |
+------------------------------------+
CAST AS MAP
CAST(expr AS MAP<key_type, value_type>)
Converte um valor VARCHAR em um mapa de key_type para value_type.
|
Parâmetro |
Valores aceitos |
|
|
VARCHAR |
|
|
BOOLEAN, DECIMAL, DOUBLE, FLOAT, BIGINT, INT/INTEGER, SMALLINT, TINYINT, VARCHAR |
|
|
BOOLEAN, DECIMAL, DOUBLE, FLOAT, BIGINT, INT/INTEGER, SMALLINT, TINYINT, VARCHAR, ARRAY, JSON, MAP |
Regras de conversão
Se expr não estiver em conformidade com o formato MAP, o sistema retornará erro:
SELECT CAST('[a,b,c]' AS MAP<varchar,varchar>);
ERROR 1815 (HY000): [30013, 2021091815562519216818804803453207833] : Value cannot be cast to map(varchar,varchar)
Exemplo
SELECT CAST('{"1":"a"}' AS MAP<varchar,varchar>);
+-------------------------------------------+
| CAST('{"1":"a"}' AS MAP<varchar,varchar>) |
+-------------------------------------------+
| {"1":"a"} |
+-------------------------------------------+
CAST AS JSON
CAST(expr AS JSON)
Converte expr para o tipo JSON.
Regras de conversão
Se expr for um VARCHAR fora do formato JSON, o resultado será NULL:
SELECT CAST('{}}' AS JSON);
NULL
Exemplos
-- VARCHAR to JSON
SELECT CAST('{}' AS JSON);
+--------------------+
| CAST('{}' AS JSON) |
+--------------------+
| {} |
+--------------------+
-- BIGINT to JSON
SELECT CAST(BIGINT '0' AS JSON);
+--------------------------+
| CAST(BIGINT '0' AS JSON) |
+--------------------------+
| 0 |
+--------------------------+