Em 28 de abril de 2010 11:16, Edimar Rangel <[email protected]> escreveu:
> Bom dia a todos!
>
> No SQL Server existe a função datediff(datepart,startdate,enddate), que
> retorna o intervalo entre as datas de acordo com o datepart informado, ou
> seja retorna o intervalo em dias, meses, anos, etc.
> No postgresql, estou utilizando da seguinte forma para ter o intervalo em
> meses:
>
> select EXTRACT(MONTH FROM AGE('2009-01-01','2010-02-01')) + (EXTRACT(YEAR
> FROM AGE('2009-01-01','2010-02-01')) * 12)
>
> Mas em outras situações preciso do intervalo em anos ou dias, existe alguma
> forma mais prática de se fazer isso?
>


Uma função?

CREATE OR REPLACE FUNCTION datediff(_tipo text, _inicio date, _fim date)
RETURNS int AS
$$
DECLARE
   _intervalo   interval;
BEGIN
   IF _tipo ~* 'ano|year' THEN
      _intervalo := age(_fim, _inicio);
      RETURN (extract(YEAR FROM _intervalo))::int;
   ELSEIF _tipo ~* 'm[eêÊ]s|month' THEN
      _intervalo := age(_fim, _inicio);
      RETURN (extract(MONTH FROM _intervalo) + extract(YEAR FROM
_intervalo)*12)::int;
   ELSEIF _tipo ~* 'dia|day' THEN
      RETURN (_fim - _inicio);
   ELSE
      RAISE EXCEPTION 'Datediff: % - tipo de intervalo inválido', _tipo;
   END IF;
   RETURN 0;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE;

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a