- Categorias:
CAST , ::
¶
Converte um valor de um tipo de dados em outro tipo de dados. As semânticas de CAST são as mesmas semânticas das funções de conversão TO_ datatype
correspondentes. Se a conversão não for possível, um erro é gerado. Para obter mais detalhes, consulte as funções de conversão individuaisTO_ datatype
. Para obter mais informações sobre a conversão de tipo de dados e as funções de conversão TO_ datatype
, consulte Conversão do tipo de dados.
O operador ::
fornece uma sintaxe alternativa para CAST.
- Consulte também:
Sintaxe¶
CAST( <source_expr> AS <target_data_type> )
[ RENAME FIELDS | ADD FIELDS ]
<source_expr> :: <target_data_type>
Argumentos¶
source_expr
Expressão de qualquer tipo de dados suportado para ser convertido em um tipo de dados diferente.
target_data_type
O tipo de dados para o qual a expressão deve ser convertida. Se o tipo de dados oferecer suporte a propriedades adicionais, tais como precisão e escala (para números/decimais), as propriedades podem ser incluídas.
RENAME FIELDS
Para OBJECTs estruturados, especifica que você deseja alterar o OBJECT para usar diferentes pares chave-valor. Os valores no objeto original são copiados para os novos pares chave-valor na ordem em que aparecem.
Para obter um exemplo, consulte Exemplo: alteração dos nomes de chave em um valor OBJECT.
ADD FIELDS
Para OBJECTs estruturados, especifica que você deseja adicionar pares chave-valor ao OBJECT.
Para obter um exemplo, consulte Exemplo: adição de chaves a um valor OBJECT.
Os valores das chaves recém-adicionadas serão definidos como NULL. Se você quiser atribuir um valor a essas chaves, chame a função OBJECT_INSERT.
Notas de uso¶
Se a escala não for suficiente para manter o valor de entrada, a função arredonda o valor.
Se a precisão não for suficiente para manter o valor de entrada, a função gera um erro.
Quando colunas numéricas são explicitamente convertidas em formulários do tipo de dados inteiros durante um descarregamento de dados em arquivos Parquet, o tipo de dados destas colunas nos arquivos Parquet é INT. Para obter mais informações, consulte Conversão explícita de colunas numéricas em tipos de dados Parquet.
As especificações de agrupamento não são mantidas quando os valores são convertidos em tipos de dados de string de texto (por exemplo, VARCHAR e STRING). É possível incluir especificações de agrupamento ao converter valores (por exemplo,
CAST(myvalue AS VARCHAR) COLLATE 'en-ai'
).Quando você usa a sintaxe alternativa
::
, você não pode especificar os argumentosRENAME FIELDS
ouADD FIELDS
.
Exemplos¶
Os exemplos CAST usam os dados da tabela a seguir:
CREATE OR REPLACE TABLE test_data_type_conversion (
varchar_value VARCHAR,
number_value NUMBER(5, 4),
timestamp_value TIMESTAMP);
INSERT INTO test_data_type_conversion VALUES (
'9.8765',
1.2345,
'2024-05-09 14:32:29.135 -0700');
SELECT * FROM test_data_type_conversion;
+---------------+--------------+-------------------------+
| VARCHAR_VALUE | NUMBER_VALUE | TIMESTAMP_VALUE |
|---------------+--------------+-------------------------|
| 9.8765 | 1.2345 | 2024-05-09 14:32:29.135 |
+---------------+--------------+-------------------------+
Os exemplos usam a função SYSTEM$TYPEOF para mostrar o tipo de dados do valor convertido.
Converta uma cadeia de caracteres em um número com escala especificada (2):
SELECT CAST(varchar_value AS NUMBER(5,2)) AS varchar_to_number1,
SYSTEM$TYPEOF(varchar_to_number1) AS data_type
FROM test_data_type_conversion;
+--------------------+------------------+
| VARCHAR_TO_NUMBER1 | DATA_TYPE |
|--------------------+------------------|
| 9.88 | NUMBER(5,2)[SB4] |
+--------------------+------------------+
Converta a mesma cadeia de caracteres em número com a escala 5, usando a notação ::
:
SELECT varchar_value::NUMBER(6,5) AS varchar_to_number2,
SYSTEM$TYPEOF(varchar_to_number2) AS data_type
FROM test_data_type_conversion;
+--------------------+------------------+
| VARCHAR_TO_NUMBER2 | DATA_TYPE |
|--------------------+------------------|
| 9.87650 | NUMBER(6,5)[SB4] |
+--------------------+------------------+
Converta um número em um número inteiro. Para um inteiro, precisão e escala não podem ser especificadas, portanto, o padrão é sempre NUMBER(38, 0).
SELECT CAST(number_value AS INTEGER) AS number_to_integer,
SYSTEM$TYPEOF(number_to_integer) AS data_type
FROM test_data_type_conversion;
+-------------------+-------------------+
| NUMBER_TO_INTEGER | DATA_TYPE |
|-------------------+-------------------|
| 1 | NUMBER(38,0)[SB1] |
+-------------------+-------------------+
Converta um número em uma cadeia de caracteres:
SELECT CAST(number_value AS VARCHAR) AS number_to_varchar,
SYSTEM$TYPEOF(number_to_varchar) AS data_type
FROM test_data_type_conversion;
+-------------------+--------------+
| NUMBER_TO_VARCHAR | DATA_TYPE |
|-------------------+--------------|
| 1.2345 | VARCHAR[LOB] |
+-------------------+--------------+
Converta um carimbo de data/hora em uma data:
SELECT CAST(timestamp_value AS DATE) AS timestamp_to_date,
SYSTEM$TYPEOF(timestamp_to_date) AS data_type
FROM test_data_type_conversion;
+-------------------+-----------+
| TIMESTAMP_TO_DATE | DATA_TYPE |
|-------------------+-----------|
| 2024-05-09 | DATE[SB4] |
+-------------------+-----------+