Bases de datos – PostgreSQL práctico – Coerción de tipos

Coerción de tipos

PostgreSQL soporta tres convenciones separadas para la coerción de tipos (también llamada fundición de tipos, o fundición de tipos explícita). La coerción de tipos es un término de aspecto algo feo que se refiere a un método dePostgreSQL para cambiar un valor de un tipo de datos a otro. En medio de una sentencia SQL, esto tiene el efecto neto de crear explícitamente una constante de un tipo arbitrario.

En general, cualquiera de los tres métodos siguientes se puede utilizar con el fin de lanzar el valor contenido en una constante de cadena a otro tipo:

  • tipo ‘valor ‘

  • ‘valor ‘::tipo

  • CAST (‘valor ‘ COMO tipo )

En el caso de las constantes numéricas mantenidas que se desea lanzar a una cadena de caracteres, tendrá que utilizar una de las siguientes formas de sintaxis:

  • valor ::tipo

  • CAST (valor COMO tipo )

El valor en esta sintaxis representa la constante cuyo tipo de datos desea modificar, y el tipo representa el tipo al que desea coaccionar, o lanzar, el valor.

Nota: Recuerde que el tipo dinero está obsoleto, y por lo tanto no es fácil de convertir.

Las constantes no son los únicos valores de datos que pueden ser coaccionados a diferentes tipos. Las columnas de un conjunto de datos devueltos por una consulta SQL pueden ser convertidas utilizando su identificador en una de las siguientes formas sintácticas:

  • identificador ::tipo

  • CAST (identificador COMO tipo )

Tenga en cuenta que no todos los tipos de datos pueden ser convertidos a cualquier otro tipo de datos. Por ejemplo, no hay ninguna manera significativa de convertir la cadena de caracteres abcd en un tipo de bit binario. Un casting inválido resultará en un error dePostgreSQL. Los moldes válidos más comunes son desde una cadena de caracteres, un tipo de fecha/hora, o un tipo numérico a texto, o cadenas de caracteres a valores numéricos.

Además de estas convenciones de moldeado de tipos, hay algunas funciones que pueden ser llamadas para lograr esencialmente el mismo efecto que un moldeado explícito de cualquiera de las formas previamente mencionadas. A menudo llevan el nombre del propio tipo (como la función text()), aunque otras tienen nombres más específicos (como bitfromint4()). El ejemplo 3-30 muestra una función de este tipo, que convierte el entero 1000 en una cadena de caracteres de tipotext que representa los caracteres 1000.

Ejemplo 3-30. Uso de las funciones de conversión de tipos

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

Debido a la semántica conflictiva reconocida por el analizador sintáctico de PostgreSQL, el formato de coerción de tipos ‘value ‘ sólo puede utilizarse para especificar el tipo de datos de un único valor (por ejemplo, una constante de cadena delimitada por comillas simples). Por el contrario, los otros métodos disponibles de coerción de tipo (‘valor ‘::tipo,CAST(‘valor’ COMO tipo )y las funciones de conversión de tipo, cuando sean aplicables) pueden utilizarse para especificar el tipo de expresiones arbitrarias.

Esto se debe en parte a que si se intenta seguir un tipo de datos con una expresión agrupada (por ejemplo, entre paréntesis) hará que PostgreSQL espere una función con el nombre del tipo de datos proporcionado (que a menudo causará un error) mientras que cada uno de los otros métodos son sintácticamente válidos sobre expresiones 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)

Deja una respuesta

Tu dirección de correo electrónico no será publicada.