La función CAST en PostgreSQL te permite convertir un tipo de dato en otro, por ejemplo, pensemos que tienes almacenado el número 55 en un campo de texto y que quieres realizar una operación aritmética con ese número. Lo más lógico es convertir el campo que contiene el número 55 en formato numérico y después operar con él. Otro caso común son las fechas, por ejemplo, puedes tener un campo de fecha almacenado como texto en una tabla y querer relacionarlo con otra tabla que la fecha esta almacenada con el tipo fecha, aquí también deberás convertir uno de los dos campos.
Sintaxis
La sintaxis de la función CAST es muy sencilla, pero podríamos encontrarnos dos casos diferentes. En el primero de ellos escribimos el nombre de la función y entre paréntesis el valor seguido del tipo a convertir.
SELECT CAST ( VALOR AS TIPO )
En el segundo caso escribimos directamente el valor seguido de :: y el tipo a convertir:
SELECT VALOR::TIPO
Recuerda que el valor puede ser el nombre del campo de una tabla en concreto. Ejemplo:
SELECT CAST( campo1 AS TIPO ),
campo1::TIPO
FROM tabla1;
Ejemplos
Convertir número a texto
En el siguiente ejemplo convertimos un número en un texto:
SELECT CAST( 1986 AS TEXT ),
1986::TEXT;
Convertir texto a número
En el siguiente ejemplo convertimos un texto en un número:
SELECT CAST( '1986' AS INTEGER ) "Método 1",
'1986'::INTEGER "Método 2";
Convertir texto a número decimal
En el siguiente ejemplo convertimos un texto en un número decimal:
SELECT CAST ('35.2' AS DOUBLE PRECISION) "Método 1",
'35.2'::DOUBLE PRECISION "Método 2";
Convertir texto a moneda
En el siguiente ejemplo convertimos un texto en una moneda:
SELECT CAST( '1986' AS MONEY ) "Método 1",
'1986'::MONEY "Método 2";
Convertir texto a intervalo
En el siguiente ejemplo convertimos un texto en un intervalo:
SELECT CAST( '35 year 3 months 4 days' AS INTERVAL ) "Método 1",
'35 year 3 months 4 days'::INTERVAL "Método 2";
Convertir texto a fecha
En el siguiente ejemplo convertimos un texto en un fecha:
SELECT CAST( 'September 26, 1986' AS DATE ) "Método 1.1",
CAST( '26/09/1986' AS DATE ) "Método 1.2",
CAST( '26-09-1986' AS DATE ) "Método 1.3",
'September 26, 1986'::DATE "Método 2";
Convertir texto a fecha y hora
En el siguiente ejemplo convertimos un texto en una fecha con hora:
SELECT CAST ('1986-09-26 15:10:20' AS TIMESTAMP) "Método 1",
'1986-09-26 15:10:20'::TIMESTAMP "Método 2";
Convertir texto a booleano
En el siguiente ejemplo convertimos un texto en un booleano:
SELECT CAST ('true' AS BOOLEAN) "Método 1.1",
CAST ('t' AS BOOLEAN) "Método 1.2",
'false'::BOOLEAN "Método 2.1",
'false'::BOOLEAN "Método 2.2";