

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Função CAST
<a name="r_CAST_function"></a>

A função CAST converte um tipo de dados em outro compatível. Por exemplo, é possível converter uma string em uma data ou um tipo numérico em uma string. CAST executa uma conversão em tempo de execução, o que significa que a conversão não altera o tipo de dados de um valor em uma tabela de origem. Isso é alterado somente no contexto da consulta.

A função CAST é muito semelhante à [Função CONVERT](r_CONVERT_function.md), pois ambas convertem um tipo de dado em outro, mas têm nomes diferentes.

Determinados tipos de dados exigem uma conversão explícita para outros tipos de dados usando a função CAST ou CONVERT. Outros tipos de dados podem ser convertidos implicitamente, como parte de outro comando, sem usar CAST ou CONVERT. Consulte [Compatibilidade e conversão dos tipos](c_Supported_data_types.md#r_Type_conversion). 

## Sintaxe
<a name="r_CAST_function-syntax"></a>

Use uma dessas duas formas equivalentes de sintaxe para transmitir expressões de um tipo de dados para outro.

```
CAST ( expression AS type )
expression :: type
```

## Argumentos
<a name="r_CAST_function-arguments"></a>

 *expressão*   
Uma expressão que avalia para um ou mais valores, tal como um nome de coluna ou um literal. A conversão de valores nulos retorna nulos. A expressão não pode conter strings em branco ou vazias. 

 *type*   
Um dos compatíveis [Tipos de dados](c_Supported_data_types.md). 

## Tipo de retorno
<a name="r_CAST_function-return-type"></a>

CAST retorna o tipo de dados especificado pelo argumento *type*. 

**nota**  
O Amazon Redshift retornará um erro se você tentar realizar uma conversão problemática, como uma conversão DECIMAL que perde precisão, como a seguinte:   

```
select 123.456::decimal(2,1);
```
ou uma conversão INTEGER que causa um transbordamento:   

```
select 12345678::smallint;
```

## Exemplos
<a name="r_CAST_function-examples"></a>

Alguns dos exemplos usam o [banco de dados TICKIT](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html) como exemplo. Para ter mais informações sobre como configurar os dados de exemplo, consulte [Carregar dados de amostra](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html).

As seguintes duas consultas são equivalentes. Ambas convertem um valor decimal em um número inteiro: 

```
select cast(pricepaid as integer)
from sales where salesid=100;

pricepaid
-----------
162
(1 row)
```

```
select pricepaid::integer
from sales where salesid=100;

pricepaid
-----------
162
(1 row)
```

O seguinte produz um resultado semelhante. Ele não exige dados de exemplo para ser executado: 

```
select cast(162.00 as integer) as pricepaid;

pricepaid
-----------
162
(1 row)
```

Neste exemplo, os valores em uma coluna de carimbo de data/hora são transmitidos como datas, o que resulta na remoção do horário de cada resultado:

```
select cast(saletime as date), salesid
from sales order by salesid limit 10;

 saletime  | salesid
-----------+---------
2008-02-18 |       1
2008-06-06 |       2
2008-06-06 |       3
2008-06-09 |       4
2008-08-31 |       5
2008-07-16 |       6
2008-06-26 |       7
2008-07-10 |       8
2008-07-22 |       9
2008-08-06 |      10
(10 rows)
```

Se você não usasse CAST conforme ilustrado no exemplo anterior, os resultados incluiriam o horário: *2008-02-18 02:36:48*.

A consulta a seguir converte dados de caracteres variáveis em uma data. Ele não exige dados de exemplo para ser executado. 

```
select cast('2008-02-18 02:36:48' as date) as mysaletime;

mysaletime    
--------------------
2008-02-18  
(1 row)
```

Neste exemplo, os valores em uma coluna de data são convertidos como timestamps: 

```
select cast(caldate as timestamp), dateid
from date order by dateid limit 10;

      caldate       | dateid
--------------------+--------
2008-01-01 00:00:00 |   1827
2008-01-02 00:00:00 |   1828
2008-01-03 00:00:00 |   1829
2008-01-04 00:00:00 |   1830
2008-01-05 00:00:00 |   1831
2008-01-06 00:00:00 |   1832
2008-01-07 00:00:00 |   1833
2008-01-08 00:00:00 |   1834
2008-01-09 00:00:00 |   1835
2008-01-10 00:00:00 |   1836
(10 rows)
```

Em um caso como no exemplo anterior, é possível obter controle adicional sobre a formatação de saída usando [TO\$1CHAR](https://docs.aws.amazon.com/redshift/latest/dg/r_TO_CHAR.html).

Neste exemplo, um número inteiro é convertido como uma string de caracteres: 

```
select cast(2008 as char(4));

bpchar
--------
2008
```

Neste exemplo, um valor DECIMAL(6,3) é convertido como um valor DECIMAL(4,1): 

```
select cast(109.652 as decimal(4,1));

numeric
---------
109.7
```

Este exemplo mostra uma expressão mais complexa. A coluna PRICEPAID (uma coluna DECIMAL(8,2)) na tabela SALES é convertida em uma coluna DECIMAL(38,2) e os valores são multiplicados por 100.000.000.000.000.000.000. 

```
select salesid, pricepaid::decimal(38,2)*100000000000000000000
as value from sales where salesid<10 order by salesid;


 salesid |           value
---------+----------------------------
       1 | 72800000000000000000000.00
       2 |  7600000000000000000000.00
       3 | 35000000000000000000000.00
       4 | 17500000000000000000000.00
       5 | 15400000000000000000000.00
       6 | 39400000000000000000000.00
       7 | 78800000000000000000000.00
       8 | 19700000000000000000000.00
       9 | 59100000000000000000000.00
(9 rows)
```

**nota**  
Não é possível executar uma operação CAST ou CONVERT no tipo de dados `GEOMETRY` para alterá-lo para outro tipo de dados. No entanto, você pode fornecer uma representação hexadecimal de uma string literal em formato binário bem-conhecido estendido (EWKB - extended well-known binary) como entrada para funções que aceitam um argumento `GEOMETRY`. Por exemplo, a função `ST_AsText` seguinte espera um tipo de dados `GEOMETRY`.   

```
SELECT ST_AsText('01010000000000000000001C400000000000002040');
```

```
st_astext  
------------
 POINT(7 8)
```
Também é possível especificar explicitamente o tipo de dados `GEOMETRY`.   

```
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
```

```
st_astext  
------------
 POINT(5 6)
```