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
