Oswaldo,
de bate-pronto, eu diria que 0.5 não é segundo. Segundo é o 28, logo,
inteiro.
Aí, haveria um ano e meio, um mes e um quinto, um dia e 1/8, etc...
Daí os arredondamentos ... décimos, centésimos ou milésimos de segundo
seriam outros 'parâmetros'.
Mas, no fim, acho que é uma questão de definição do banco (tratamento de
tipos). Eu devia ter relido esta seção do manual.
Funcionava no 8.2. Não houve qualquer consequência. Antecipei e corrigi um
problema em futura migração de versão e aprendi mais um pouco.

Att.,
Sergio


2009/7/27 Osvaldo Kussama <[email protected]>

> 2009/7/27 Osvaldo Kussama <[email protected]>:
> > 2009/7/27 sergio nogueira <[email protected]>:
> >> Decidi usar o smallint (sem plics, no ano):
> >>
> >>   IF ( date_part('year', NEW.data::timestamp)::smallint = 2006::smallint
> )
> >> THEN
> >>
> >> Funciona no 8.2 e 8.4
> >>
> >> Ainda não entendo porque uma função - date_part() - retorna um double
> >> (float8) e não um text. ou integer ou smallint. quando o valor esperado
> deve
> >> ser, pelo menos, um integer (smallint) ... Inclusive porque um timestamo
> é
> >> um text 'ano-mes-dia hora:minuto:segundo' ...
> >
> > O resultado sempre será numérico. Na maioria dos casos o resultado é
> > um inteiro mas, pelo menos para um caso, pode ser um número real:
> >
> > SELECT EXTRACT(SECOND FROM TIME '17:12:28.5');
> > Result: 28.5
> >
> >
> http://www.postgresql.org/docs/current/interactive/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT
> >
> >
> >>
> >> Tá na mão do sinhô no que esta transformação pode resultar (de float8
> para
> >> smallint). Mas eu teho fé.
> >>
> >
> > Para seuvcaso (ano) sempre estará certo.
> >
>
>
> OOps!
> Parece que temos um problema no manual:
>
> bdteste=# SELECT version();
>                                              version
>
> ---------------------------------------------------------------------------------------------------
>  PostgreSQL 8.3.7 on i486-pc-linux-gnu, compiled by GCC gcc-4.3.real
> (Ubuntu 4.3.3-5ubuntu4) 4.3.3
> (1 registro)
>
> bdteste=# SELECT EXTRACT(SECOND FROM TIME '17:12:28.5');
>  date_part
> -----------
>        28
> (1 registro)
>
> bdteste=# SELECT EXTRACT(SECOND FROM current_time);
>  date_part
> -----------
>        29
> (1 registro)
>
> bdteste=# SELECT EXTRACT(SECOND FROM current_timestamp);
>  date_part
> -----------
>  4.293842
> (1 registro)
>
> bdteste=# SELECT EXTRACT(SECOND FROM TIMESTAMP '2008-12-21 17:12:28.5');
>  date_part
> -----------
>      28.5
> (1 registro)
>
> Pelos testes parece que retornar um número real é válido para
> TIMESTAMP e não para TIME.
>
> Osvaldo
> _______________________________________________
> 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

Responder a