[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