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