[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