As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Função CAST
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, 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.
Sintaxe
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
- 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 cadeias de caracteres em branco ou vazias.
- tipo
-
Um dos tipos de dados suportadosTipos de dados, exceto para os tipos de dados VARBYTE, BINARY e BINARY VARYING.
Tipo de retorno
CAST retorna o tipo de dados especificado pelo argumento type.
nota
AWS Clean Rooms retorna um erro se você tentar realizar uma conversão problemática, como uma conversão DECIMAL que perde a precisão, como a seguir:
select 123.456::decimal(2,1);
ou uma conversão INTEGER que causa um transbordamento:
select 12345678::smallint;
Exemplos
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 o exemplo anterior, você pode obter controle adicional sobre a formatação de saída usandoTO_CHAR.
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)