variable tipos tipo postgres ejemplos declaracion datos postgresql variables intervals period

postgresql - tipos - Usando un período variable en un intervalo en Postgres



tipos de datos postgresql varchar (2)

Este código no tiene nada que ver directamente con su situación, pero sí ilustra cómo usar variables en la aritmética INTERVAL. El nombre de mi mesa es "calendario".

CREATE OR REPLACE FUNCTION test_param(num_months integer) RETURNS SETOF calendar AS $BODY$ select * from calendar where cal_date <= ''2008-12-31 00:00:00'' and cal_date > date ''2008-12-31'' - ($1 || '' month'')::interval; $BODY$ LANGUAGE sql VOLATILE COST 100 ROWS 1000;

Tengo una relación que mantiene datos históricos mensuales. Esta información se agrega a la tabla el último día de cada mes. Un servicio que estoy escribiendo se puede llamar especificando un mes y varios meses antes para recuperar los datos históricos. Estoy haciendo esto creando variables startDate y endDate, y luego devolviendo datos entre los dos. El problema que tengo es que startDate es una cantidad variable de meses antes de endDate, y no puedo entender cómo usar un período variable en un intervalo.

Esto es lo que tengo:

DECLARE endDate TIMESTAMP := (DATE_TRUNC(''MONTH'',$2) + INTERVAL ''1 MONTH'') - INTERVAL ''1 DAY''; startDate TIMESTAMP := endDate - INTERVAL $3 ''MONTH'';

Sé que la línea para startDate no es correcta. ¿Cómo se hace esto correctamente?


Usa esta linea:

startDate TIMESTAMP := endDate - ($3 || '' MONTH'')::INTERVAL;

y observe el espacio antes del MONTH . Básicamente: construyes una cadena con 4 MONTH como 4 MONTH y la moldeas con ::type en un intervalo adecuado.

Editar : He encontrado otra solución: puedes calcular con un interval como este:

startDate TIMESTAMP := endDate - $3 * INTERVAL ''1 MONTH'';

Esto se ve un poco mejor para mí.