Fórum Dúvida no Exemplo da CB deste mês; #42060

03/02/2004

0

Galera, fiz uma pequena alteração na stored procedure de exemplo passada no artigo : ´[color=green:a464ae73fd]Horas e Datas em IB/FB[/color:a464ae73fd]´ da ClubeDelphi deste mês (Fev/2004), mas não obtive o resultado esperado.

Fiz a alteração na esperança de retornar a quantidade em anos entre as duas datas, mas fiz errado a conta...alguém pode me ajudar?

O que eu quero na verdade é o seguinte:

Eu faço aniversário em 28/09, nasci em 28/09/1977. Se eu passar para a SP a data 28/09/2004 ele me retornará 27 anos, mas se eu passar [b:a464ae73fd][i:a464ae73fd]27/09/2004[/i:a464ae73fd][/b:a464ae73fd], um dia antes, deve me retornar 26 anos, que é minha idade hoje. Isso será usado para determinar se meu cliente é ou não maior de 18 anos, sendo assim eu posso ou não requerer um [b:a464ae73fd][color=blue:a464ae73fd]Responsável Financeiro[/color:a464ae73fd][/b:a464ae73fd] para assinar pelo cliente.

CREATE PROCEDURE INFO_PERIODO (
INICIO TIMESTAMP,
FIM TIMESTAMP)
RETURNS (
DIAS INTEGER,
HORAS INTEGER,
MINUTOS INTEGER,
SEGUNDOS INTEGER,
[color=red:a464ae73fd][b:a464ae73fd]ANOS INTEGER[/b:a464ae73fd][/color:a464ae73fd])
AS
DECLARE VARIABLE TEMP NUMERIC(18,7);
BEGIN
/* Inicializa variaveis */
dias = 0;
horas = 0;
minutos = 0;
segundos = 0;
[color=red:a464ae73fd][b:a464ae73fd] anos = 0;[/b:a464ae73fd][/color:a464ae73fd] /* Temp armazena a diferença do periodo */
/* em dias e frações de dias*/
temp = (fim - inicio);
/* Obtém o número de dias - parte inteira */
dias = temp - 0.5;
/* Retira dias do timestamp, deixando apenas hora,minuto,segundo */
temp = temp - dias;
/* Transforma em segundos o valor em ´total´ */
temp = temp * 86400;
horas = (temp / 3600) - 0.5; /* 3.600 seg. por hora */
temp = temp - (horas*3600); /* Temp contém mim. e seg. */
minutos = (temp / 60) - 0.50; /* 60 seg. por mim. */
segundos = temp - (minutos * 60); /* Extrai seg. */
[color=red:a464ae73fd] [b:a464ae73fd]/* obtém os anos*/
anos = (dias / 365);[/b:a464ae73fd][/color:a464ae73fd]END[color=green:a464ae73fd][/color:a464ae73fd]


Adriano Santos

Adriano Santos

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar