Solución para usar función make_interval en postgresql 9.3
La funcion make_interval fue agregada desde la versión postgresql 9.4 en adelante, permite convertir un valor ya sea character varying, integer o cualquier otro, en un tipo de dato interval.
El tipo de dato interval es muy util para trabajar con operaciones con fechas, por ejemplo:
Si queremos restarle un mes a una fecha cualquiera, hay muchos aspectos que hay que considerar ,como el que todos los meses no tienen la misma cantidad de días.
#Select date '2017-07-20' - interval '1 month' as fecha;
Se obtiene de respuesta : "2017-06-20 00:00:00"
#Select date '2017-03-31' - interval '1 month';
Se obtiene de respuesta : "2017-02-28 00:00:00"
Si observamos el primer ejemplo se puede observar que al restarle un mes con el tipo de dato interval el sistema se encarga propia mente de hacer el calculo.
El segundo ejemplo explica mucho mejor la potenciabilidad del tipo de dato interval,.el cual determina cuantos dias restarles para tener la diferencia exacta de un mes.
El tipo interval acepta varias opciones:
Para mas informacion del tipo de dato interval dale clic aquí
-Entonces si queremos convertir un datos tipo integer en un tipo interval, usamos:
Select make_interval(years := 1) as funcion;
Se obtiene de respuesta: "1 year"
El problema es que la funcion make_interval no esta disponible para la versión de postgresql 9.3, pero existe un solucion facil. Se puede usar la funcion CAST.
CAST((1 || 'year') as interval);
Aquí un ejemplo :
CREATE OR REPLACE FUNCTION vehiculo.f_prueba()
RETURNS character varying AS
$BODY$
DECLARE
datos integer := 1;
BEGIN
IF age(date '2017-01-30',date '2016-01-30') = CAST((datos || 'year') as interval) THEN
return 'Funciona';
ELSE
return 'No funciona';
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Espero que les haya servido. Comenten si les gusto o tienen alguna sugerencia.
El tipo de dato interval es muy util para trabajar con operaciones con fechas, por ejemplo:
Si queremos restarle un mes a una fecha cualquiera, hay muchos aspectos que hay que considerar ,como el que todos los meses no tienen la misma cantidad de días.
#Select date '2017-07-20' - interval '1 month' as fecha;
Se obtiene de respuesta : "2017-06-20 00:00:00"
#Select date '2017-03-31' - interval '1 month';
Se obtiene de respuesta : "2017-02-28 00:00:00"
Si observamos el primer ejemplo se puede observar que al restarle un mes con el tipo de dato interval el sistema se encarga propia mente de hacer el calculo.
El segundo ejemplo explica mucho mejor la potenciabilidad del tipo de dato interval,.el cual determina cuantos dias restarles para tener la diferencia exacta de un mes.
El tipo interval acepta varias opciones:
YEAR MONTH
WEEK
DAY HOUR MINUTE SECOND
Para mas informacion del tipo de dato interval dale clic aquí
-Entonces si queremos convertir un datos tipo integer en un tipo interval, usamos:
Select make_interval(years := 1) as funcion;
Se obtiene de respuesta: "1 year"
El problema es que la funcion make_interval no esta disponible para la versión de postgresql 9.3, pero existe un solucion facil. Se puede usar la funcion CAST.
CAST((1 || 'year') as interval);
Aquí un ejemplo :
CREATE OR REPLACE FUNCTION vehiculo.f_prueba()
RETURNS character varying AS
$BODY$
DECLARE
datos integer := 1;
BEGIN
IF age(date '2017-01-30',date '2016-01-30') = CAST((datos || 'year') as interval) THEN
return 'Funciona';
ELSE
return 'No funciona';
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Espero que les haya servido. Comenten si les gusto o tienen alguna sugerencia.
Comentarios
Publicar un comentario