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:
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

Entradas más populares de este blog

USO DE DBLINK EN FUNCIONES DE POSTGRESQL(PARTE UNO)

PASAR UN ARRAY COMO PARAMETRO A UNA FUNCION DE POSTGRESQL (PARTE UNO)

Codeigniter solucion de :A PHP Error was encountered