Conversiones con CAST en PostgreSQL

Hola a tod@s, hoy queríamos compartir con vosotros una entrada sobre cómo realizar conversiones con CAST en PostgreSQL. Este comando existe en todas las bases de datos y se utiliza para realizar la conversión de un tipo de datos en otro. Las conversiones más habituales suelen ser de String a Integer, o fechas a String y viceversa.

Es muy importante utilizar el tipo de datos correcto sobre todo cuando lo utilizamos en joins de tablas, ya que si dejamos al propio motor la conversión de datos a veces puede no devolver el resultado correctamente o no utilizar los índices que tengamos creados y provocarnos un problema de rendimiento serio.

Sintaxis de CAST

La sintaxis del comando CAST es:

CAST ( expression AS target_type );

where:

  1. La expresión puede ser una constante, una columna de una tabla o cualquier expresión que se resuelva a un valor.
  2. El target_type es tipo de datos final al que queremos convertir la expresión.

También se puede utilizar la siguiente sintaxis sin problema, ya que el resultado es el mismo:

expression::type

Un ejemplo puede ser la conversión del número 97 a un tipo String, se puede hacer de las siguientes formas:

SELECT CAST(97 AS varchar);

ó

SELECT 97::varchar;

El resultado de ambos comandos es:

Ejemplos de conversiones con CAST

Ejemplo 1. String a Integer

Si necesitamos realizar cualquier operación matemática sobre un campo del tipo STRING podemos hacer la siguiente conversión:

SELECT '100'::integer;

Esta conversión no es posible en el caso que el texto sea alfanumérico, ya que os daría un error:

SELECT '100ab'::integer;

Ejemplo 2. String a Date

Se suele utilizar en caso de necesitar operar sobre una fecha, como por ejemplo calcular la edad de un empleado. En ese caso se puede realizar la conversión con el comando:

SELECT CAST ('01-01-1990' AS DATE)

El resultado será:

Los formatos de fecha más comunes utilizados son: MM/DD/YYYY, MM-DD-YYYY, MM-DD-YY, MM/DD/YY, YYYY/MM/DD, YYYY-MM-DD.

Al igual que en el caso anterior si la fecha no es válida nos devolverá un error:

Conversiones numéricas con CAST

Ejemplo 3: String a tipo Double

Si ejecutado el comando:

SELECT '10.25'::DOUBLE

Nos devuelve un error porque el tipo DOUBLE no es un tipo de datos nativo de PostgreSQL, necesitamos ejecutar lo siguiente:

SELECT '10.25'::DOUBLE PRECISION

El resultado es:

Ejemplo 4: String a Boolean

La sintaxis en este caso es:

SELECT CAST('true' AS BOOLEAN),
CAST('false' as BOOLEAN),
CAST('T' as BOOLEAN),
CAST('F' as BOOLEAN),
CAST('1' as BOOLEAN),
CAST('0' as BOOLEAN); 

El resultado es:

Conversiones con CAST boolean gpsos

El error que obtenemos al intentar por ejemplo realizar el CAST sobre el valor 3 es el siguiente:

Conversiones con CAST

Ejemplo 5: String a Timestamp

Esta operación se puede realizar con el siguiente comando:

SELECT '02-12-2020 13:13:21'::timestamp;

El resultado será:

Ejemplo 6: String a Interval

El tipo interval se utiliza para obtener los intervalos de tiempo que han pasado entre dos fechas. Varios ejemplos son:

SELECT '55 minute'::interval,
'2.5 hour'::interval,
'1.5 day'::interval,
'2.5 week'::interval,
'3.2 month'::interval; 

El resultado será:

Conversiones con CAST interval gpsos

También es sencillo pasar los tipos interval a fechas en caso de ser necesario para realizar operaciones sobre las mismas.

Esperamos que la entrada os sea de utilidad y la podáis utilizar en vuestras operativas diarias. No te pierdas ninguna apuntándote a nuestra newsletter mensual. Con un email al mes estarás informado de nuestras publicaciones.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Muchas gracias.

Más ejemplos en: https://www.postgresqltutorial.com/postgresql-cast/