Função CAST - AWS Clean Rooms

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)