[firebase-br] FB 1.0 e função MOD
Eduardo Jedliczka
jedyfb em gmail.com
Qui Abr 2 13:26:13 -03 2009
ok. você resolveu o seu problema, mas (vou meter o bedelho para não
perder o hábito) eu faria assim:
CREATE PROCEDURE BISEXTO (ano integer)
returns (resultado smallint)
as
declare variable data date;
data = cast('01/03/' || ano as date)-1;
if Extract(day from data) = 29 THEN
RESULTADO = 1;
ELSE
RESULTADO = 0;
SUSPEND;
END
PS: dá até para eliminar a variável data, ou embutir tudo num select...
Sem mais,
Eduardo Jedliczka
Em Qui, 2009-04-02 às 09:35 -0300, HPensador escreveu:
> Bom dia Magno!
>
> Obrigado por sua atenção...
> Bem conversando com um colega aqui na empresa acabamos chegando a essa
> função para o FB 1.0 (testada e funcionando 100%):
>
> CREATE PROCEDURE BISEXTO (
> ano integer)
> returns (
> resultado smallint)
> as
> declare variable mod_4 integer;
> declare variable mod_100 integer;
> declare variable mod_400 integer;
> BEGIN
> SELECT :ANO - (CAST(:ANO/4 AS INTEGER) * 4) FROM RDB$DATABASE INTO
> :MOD_4;
> SELECT :ANO - (CAST(:ANO/100 AS INTEGER) * 100) FROM RDB$DATABASE
> INTO :MOD_100;
> SELECT :ANO - (CAST(:ANO/400 AS INTEGER) * 400) FROM RDB$DATABASE
> INTO :MOD_400;
>
> IF (((:MOD_4 = 0) AND (:MOD_100 <> 0)) OR (:MOD_400 = 0)) THEN
> RESULTADO = 1;
> ELSE
> RESULTADO = 0;
> SUSPEND;
> END
>
> Pronto... agora se algum colega precisar esta aí prontinha - é só usar.
>
Mais detalhes sobre a lista de discussão lista