[firebase-br] Pegar Mes anterior e Posterior

Euler Jr. euler em siginformatica.com.br
Sex Jun 24 11:14:34 -03 2005


Criei a SP para esta finalidade. O código está abaixo:

SET TERM # ;
RECREATE PROCEDURE MES(MESANO CHAR(6)) RETURNS (ANTES CHAR(6),
DEPOIS CHAR(6)) AS
DECLARE VARIABLE MES_IN CHAR(2);
DECLARE VARIABLE ANO_IN CHAR(4);
DECLARE VARIABLE MES_ANTES SMALLINT;
DECLARE VARIABLE MES_DEPOIS SMALLINT;
DECLARE VARIABLE ANO_ANTES SMALLINT;
DECLARE VARIABLE ANO_DEPOIS SMALLINT;
DECLARE VARIABLE MESA CHAR(2);
DECLARE VARIABLE MESD CHAR(2);
BEGIN
   MES_IN = SUBSTRING(MESANO FROM 1 FOR 2);
   ANO_IN = SUBSTRING(MESANO FROM 3 FOR 4);

   IF ( ANO_IN IS NOT NULL ) THEN BEGIN
      ANO_ANTES = CAST(ANO_IN AS SMALLINT);
      ANO_DEPOIS = CAST(ANO_IN AS SMALLINT);
   END

   IF ( MES_IN IS NOT NULL ) THEN BEGIN
      MES_ANTES = CAST(MES_IN AS SMALLINT);
      MES_DEPOIS = CAST(MES_IN AS SMALLINT);

      IF ( MES_ANTES = 1 ) THEN BEGIN
         ANO_ANTES = (ANO_ANTES - 1);
         MES_ANTES = 12;
         ANO_DEPOIS = CAST(ANO_IN AS SMALLINT);
         MES_DEPOIS = 2;
      END
      ELSE IF ( MES_ANTES = 12 ) THEN BEGIN
         ANO_ANTES = CAST(ANO_IN AS SMALLINT);
         MES_ANTES = 11;
         ANO_DEPOIS = (ANO_DEPOIS + 1);
         MES_DEPOIS = 1;
      END
      ELSE BEGIN
         MES_ANTES = (MES_ANTES - 1);
         MES_DEPOIS = (MES_DEPOIS + 1);
      END
   END

   MESA = CAST(MES_ANTES AS CHAR(2));
   MESD = CAST(MES_DEPOIS AS CHAR(2));

   IF ( MES_ANTES < 10 ) THEN BEGIN
      MES_ANTES = ( MES_ANTES * 10 );
      MESA = CAST(MES_ANTES AS CHAR(2));
      MESA = SUBSTRING(MESA FROM 2 FOR 1)||SUBSTRING(MESA FROM 1 FOR 1);
   END

   IF ( MES_DEPOIS < 10 ) THEN BEGIN
      MES_DEPOIS = ( MES_DEPOIS * 10 );
      MESD = CAST(MES_DEPOIS AS CHAR(2));
      MESD = SUBSTRING(MESD FROM 2 FOR 1)||SUBSTRING(MESD FROM 1 FOR 1);
   END

   ANTES = MESA||CAST(ANO_ANTES AS CHAR(4));
   DEPOIS = MESD||CAST(ANO_DEPOIS AS CHAR(4));
END #
SET TERM ; #


Efetuei os testes no FB 1.5 sem problemas.
ex:

execute procedure mes('062005');

retorna: 052005 e 072005

execute procedure mes('122005');

retorna: 112005 e 012006


Como vc nao informou o tipo de parametro de entrada e saida, assumi como
char. Faça as devidas alterações conforme suas necessidades.


[]s
Euler Jr.


----- Original Message -----
From: "Adalberto Sousa Monteiro" <asm190 em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, June 24, 2005 10:22 AM
Subject: [firebase-br] Pegar Mes anterior e Posterior


Como faço dentro do Firebird, para pegar um mês antes e depois, de um
determinado mes passado como parametro ?

Gostaria de informar o mes 062005 e ter como resultado 052005 e 072005 ??

Valeu
Adalberto
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista