Categorias:

Funções de conversão

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:

TRY_CAST

Sintaxe

CAST( <source_expr> AS <target_data_type> )
  [ RENAME FIELDS | ADD FIELDS ]

<source_expr> :: <target_data_type>
Copy

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 argumentos RENAME FIELDS ou ADD 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;
Copy
+---------------+--------------+-------------------------+
| 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;
Copy
+--------------------+------------------+
| 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;
Copy
+--------------------+------------------+
| 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;
Copy
+-------------------+-------------------+
| 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;
Copy
+-------------------+------------------------+
| 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;
Copy
+-------------------+-----------+
| TIMESTAMP_TO_DATE | DATA_TYPE |
|-------------------+-----------|
| 2024-05-09        | DATE[SB4] |
+-------------------+-----------+