- 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: Como alterar os nomes da chave em um OBJECT.
ADD FIELDS
Para OBJECTs estruturados, especifica que você deseja adicionar pares chave-valor ao OBJECT.
Para obter um exemplo, consulte Exemplo: Como adicionar chaves a um 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.
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(16777216)[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] |
+-------------------+-----------+