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í.