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 do CAST
A CAST função converte um tipo de dados em outro tipo de dados compatível. Por exemplo, você pode converter uma string em uma data ou um tipo numérico em uma string. CASTexecuta 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 CAST função é muito semelhante aFunção do CONVERT, pois ambas convertem um tipo de dados em outro, mas são chamadas de forma diferente.
Alguns tipos de dados exigem uma conversão explícita para outros tipos de dados usando a CONVERT função CAST ou. Outros tipos de dados podem ser convertidos implicitamente, como parte de outro comando, sem usar CAST ouCONVERT. 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 strings em branco ou vazias.
- tipo
-
Um dos tipos de BINARY VARYING dados compatíveis Tipos de dados VARBYTEBINARY, exceto para, e.
Tipo de retorno
CASTretorna 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 DECIMAL conversão que perde a precisão, como a seguir:
select 123.456::decimal(2,1);
ou qualquer INTEGER conversão que cause um estouro:
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 usou CAST conforme ilustrado na amostra anterior, os resultados incluiriam a hora: 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 ter controle adicional sobre a formatação de saída usando PARA_ 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 PRICEPAID coluna (uma coluna DECIMAL (8,2)) na SALES tabela é convertida em uma coluna DECIMAL (38,2) e os valores são multiplicados por 100000000000000000000:
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)