Flávio, não entendi muito bem o que você quer, mas se o queres é o tempo
total de trabalho, eu criei uma função para somar horas onde o meu intuito
foi o de somar o prazo decorrido:
CREATE OR REPLACE FUNCTION dif_horas(dtini date, hrini time, dtfim date,
hrfim time) RETURNS interval AS
$BODY$
BEGIN
RETURN SUM(EXTRACT(EPOCH FROM (dtfim + hrfim)) - EXTRACT(EPOCH FROM
(dtini + hrini))) * INTERVAL '1 SECOND' AS vin_tempo;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Exemplo de utilização: SELECT
dif_horas('2011-01-11','12:00','2011-01-12','18:00') -- irá retornar
30:00:00
Espero ter ajudado.
Abs. Danilo
Em 12 de janeiro de 2012 17:10, Flávio Alves Granato <
[email protected]> escreveu:
> Senhores,
>
> Estou com uma dúvida se estou no caminho certo para somar as horas de
> um sistema que estou dando manutenção.
> Tenho esta estrutura:
>
> CREATE TABLE tempos
> (
> usuario_cpf character varying(11) NOT NULL,
> projeto_nome character varying NOT NULL,
> projeto_datainicial date NOT NULL,
> tempo_entrada timestamp without time zone NOT NULL,
> tempo_saida timestamp without time zone,
> comentario text,
> tipo_tempo character varying,
> CONSTRAINT pk_tempo PRIMARY KEY (usuario_cpf , projeto_nome ,
> projeto_datainicial , tempo_entrada ),
> CONSTRAINT "FK_tempo_tipo-tempo" FOREIGN KEY (tipo_tempo)
> REFERENCES tipo_tempo (nome) MATCH SIMPLE
> ON UPDATE NO ACTION ON DELETE NO ACTION,
> CONSTRAINT "FK_tempo_usuario" FOREIGN KEY (usuario_cpf)
> REFERENCES usuarios (cpf) MATCH SIMPLE
> ON UPDATE NO ACTION ON DELETE NO ACTION
> )
>
> E estou utilizando a query abaixo, mas não sei se esta correto. A
> pessoa pode entrar com um ou mais intervalo de tempo trabalhado no
> mesmo dia e tenho
> que retornar a quantidade de horas mesmo se por exemplo a pessoa
> começar às 23:00 e parar às 06:00 do próximo dia.
> Será que é por este caminho mesmo?
>
> SELECT SUM(AGE(tempo_saida, tempo_entrada))
> FROM tempos
> WHERE EXTRACT(DAY FROM tempo_entrada) = EXTRACT(DAY FROM tempo_saida)
> EXTRACT(MONTH FROM tempo_entrada) = EXTRACT(MONTH FROM tempo_saida)
> EXTRACT(YEAR FROM tempo_entrada) = EXTRACT(YEAR FROM tempo_saida)
> AND EXTRACT(YEAR FROM tempo_entrada) = 2012
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral