Fórum como incrementar um mês a data em uma SP?? #55825
18/04/2006
0
if (vFatura =´S´) then
begin
xqp = VPARCELA;
Venc = vvencimento;
while (:xQP <= :vQP ) do
begin
Insert into Fat_Receber (
ID_Fatura,
ID_Cliente,
Emissao,
Valor_Total,
Valor_Parcela,
Vencimento,
QP,
ID_Loja,
ID_Vendedor,
ID_Tipo,
Parcela )
Values(
:vID_Fatura,
:vID_Cliente,
:vEmissao,
:vValor_Total_Fatura,
:vValor_Parcela,
:Venc,
:vQP,
:vID_Loja,
:vID_Vendedor,
:vID_Tipo,
:xQP );
xQP = xQP + 1;
Venc = Venc + 30;
end
end
Camilo
Curtir tópico
+ 0Posts
20/04/2006
Thomaz_prg
Primeiro cria-se 4 variáveis:
declare variable dia integer; declare variable mes integer; declare variable ano integer; declare variable ndata varchar(10)
Depois é só separar os campos e fazer a soma, para em seguida, montar novamente a data:
dia = extract( day from CampoData ); mes = extract( month from CampoData ); ano = extract( year from CampoData ); if ( :mes = 12 ) then begin ano = :ano + 1; mes = 1; end else mes = :mes + 1; if (:mes = 2 and :dia >28) then :dia = 28; ndata = :dia||´.´||:mes||´.´||:ano;
Então é só montar a data:
Venc = Cast(nData as Date);
A única observação é que, no caso desse código, ele não analisa se é ano bissexto ou não, ou seja, se a data for 29/01/aaaa ao somar o mês, por mais que exista uma data 29/02/aaaa ele irá colocar 28/02/aaaa. É uma pequena falha, mas creio que dê para contornar isso.
Gostei + 0
21/04/2006
Thomaz_prg
Gostei + 0
24/04/2006
Camilo
Gostei + 0
24/04/2006
Thomaz_prg
Arquivos de Programas\Firebird\Firebird_X_X\UDF\fbudf.sql
Para incrementar o mês, basta usar a função AddMonth... dessa forma
NovoValor = AddMonth( SeuCampoOuValor , QuantosMesesIncrementar )
sendo:
NovoValor um timestamp ou date.
SeuCampoOuValor um timestamp ou date
QuantosMesesIncrementar um valor inteiro.
A função irá retornar um valor do tipo TimeStamp, portanto, se for apenas para mostrar esse valor em um select, o melhor é forçar a conversão para o tipo date: cast( AddMonth( p1, p2 ) as Date ).
Desculpe minha falha... coloquei o nome da função (UDF) como sendo IncMonth, mas o nome correto é AddMonth.
Gostei + 0
24/04/2006
Amilton/pr
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)