Bases de dados – PostgreSQL Prático – Tipo Coercion

Type Coercion

PostgreSQL suporta três convenções separadas para o tipo coercion (também chamado type casting, orexplicit type casting). Tipo coercion é um termo um pouco feio que se refere ao método aPostgreSQL para mudar um valor de um tipo de dado para outro. No meio de uma instrução SQL, isto tem o neteffect de explicitamente criar uma constante de um tipo arbitrário.

Generalmente qualquer um dos três métodos seguintes pode ser usado para lançar o valor contido dentro de uma constante de string para um outro tipo:

  • tipo ‘valor ‘

  • ‘valor ‘::tipo

  • CAST (‘valor ‘ tipo AS’)

No caso de constantes numéricas mantidas que você deseja lançar para uma string de caracteres, você precisará usar uma das seguintes formas de sintaxe:

  • valor ::type

  • CAST (valor AS type )

O valor nesta sintaxe representa a constante cujo tipo de dado você deseja modificar, e o tipo representa o tipo em que você deseja coagir, ou lançar, o valor.

Nota: Lembre-se que o tipo de dinheiro é depreciado e, portanto, não é fácil de ser moldado.

Constantes não são os únicos valores de dados que podem ser coagidos a diferentes tipos. As colunas de um conjunto de dados retornadas por uma consulta SQL podem ser lançadas usando seu identificador em uma das seguintes formas de sintaxe:

  • identifier ::type

  • CAST (identificador AS type )

Cuidado que nem todos os tipos de dados podem ser coercivos em todos os outros tipos de dados. Por exemplo, não existe uma maneira significativa de converter a cadeia de caracteres abcd em um tipo de bit binário. Uma fundição inválida resultará em um erro doPostgreSQL. Castings válidos comuns são de string de caracteres, tipo data/hora, ou um tipo numérico para texto, ou strings de caracteres para valores numéricos.

Além dessas convenções de casting de tipos, há algumas funções que podem ser chamadas para alcançaressencialmente o mesmo efeito que um casting explícito de qualquer uma das formas mencionadas anteriormente. Estas frequentemente levam o nome do próprio tipo (como a função text()), embora outras sejam nomeadas mais especificamente (como bitfromint4()). O exemplo 3-30 mostra tal função, convertendo o inteiro 1000 para uma cadeia de caracteres de texto tipográfico representando os caracteres 1000.

Exemplo 3-30. Usando Funções de Conversão de Tipo

booktown=# SELECT text(1000) booktown-# AS explicit_text; explicit_text--------------- 1000(1 row)

Por causa de semântica conflitante reconhecida pelo parser do PostgreSQL, o formato de coerção do tipo ‘valor’ só pode ser usado para especificar o tipo de dado de um único valor (por exemplo, uma constante de string delimitada por aspas simples). Em contraste, os outros métodos disponíveis de tipo coerção(‘value ‘::type,CAST(‘value’ AS type ) e funções de conversão de tipo, quando aplicável) podem ser usados para especificar o tipo de expressões arbitrárias.

Isso é parcialmente porque tentar seguir um tipo de dados com uma expressão agrupada (por exemplo, entre parênteses) irá fazer com que o PostgreSQL espere uma função com o nome do tipo de dados fornecido (o que frequentemente causará um erro) enquanto cada um dos outros métodos são sintacticamente válidos em expressões agrupadas.

booktown=# SELECT 1 + integer ('1' || '2') AS add_one_to_twelve;ERROR: Function 'integer(text)' does not exist Unable to identify a function that satisfies the given argument types You may need to add explicit typecastsbooktown=# SELECT 1 + ('1' || '2')::integer AS add_one_to_twelve; add_one_to_twelve------------------- 13(1 row)booktown=# SELECT 1 + CAST('1' || '2' AS integer) AS add_on_to_twelve; add_on_to_twelve------------------ 13(1 row)

Deixe uma resposta

O seu endereço de email não será publicado.