GARANTIR DESCONTO

Fórum Cálculo dinâmico da idade actual #394792

31/01/2011

0

Boa tarde,

Encontro-me a desenvolver uma base de dados em Postgresql e gostaria de saber se é possível na mesma tabela
ter uma coluna(idade_actual) que seja automaticamente calculada a partir de uma outra(data de nascimento) em que o utilizador insere este dado na web (a interface está a ser construída em PHP).

Desde já, obrigado pelos esclarecimentos que me possam dar.

Margarida Martins

Margarida Martins

Responder

Posts

01/02/2011

Jair N.

Bom Dia, "se for necessário, pode"! Porém, como é um campo calculado, não é aconselhavel! Como você vê a atualização deste campo no dia a dia! Qual a sua necessidade deste campo! pode ser feita uma função, um procedimento para obter a informação.


Responder

Gostei + 0

01/02/2011

Margarida Martins

Bom dia,
Antes demais, obrigado pelo seu feedback.
A actualização deste campo no dia-a-dia tem a ver com uma necessidade prática de quem vai aceder à base de dados que estou a construir.

De facto, ontem numa pesquisa pela net percebi que o que pretendo poderá ser feito em código PHP, por exemplo, através da função:

<?php// Calculate the age from a given birth date// Example: GetAge("1986-06-18");function GetAge($Birthdate){        // Explode the date into meaningful variables        list($BirthYear,$BirthMonth,$BirthDay) = explode("-", $Birthdate);        // Find the differences        $YearDiff = date("Y") - $BirthYear;        $MonthDiff = date("m") - $BirthMonth;        $DayDiff = date("d") - $BirthDay;        // If the birthday has not occured this year        if ($DayDiff < 0 || $MonthDiff < 0)          $YearDiff--;        return $YearDiff;}?>A minha dúvida, neste momento, tem a ver como chamar a minha variável data_nascimento(no caso da função acima: $Birthdate)  e retornar a idade actual(no caso da funçao de cima:$YearDiff) da minha tabela em questão. A variavel idade_actual tem de ser definida de alguma forma especial no Postgresql para depois no PHP, ser retornado o valor da função?




Responder

Gostei + 0

01/02/2011

Jair N.

Boa Tarde, olha, como já disse antes, "sendo um campo calculado" você terá que gerar uma atualização por processo. No postgresql uma das opções seria (+-) esta assim

int_idade =  SELECT EXTRACT (YEAR FROM AGE(CURRENT_DATE, dat_nascimento)) ;

No seu caso PHP utilizando o próprio recurso da linguagem, o processo deverá atualizar este campo? (ou não)

Recomento apenas guardar valores em campos calculaveis, como por exemplo resultado de uma nota em que a quantidade e o valor unitário não equivalem ao corespondente ao valor total "pode"  não apresentar o mesmo valor, que em um comprovante fiscal, independente deste valor estar trucado ou arredondado, neste caso é "recomendado guardar o valor" para evitar aborrecimentos. Já uma caracteristica de diferença entre datas não seria necessário visto que este processo consome recursos e "disparos" toda vêz que for validado.


Assim procede utilizar sua ferramenta PHP...


Responder

Gostei + 0

01/02/2011

Margarida Martins

certo... já tinha também tentado utilizar essa função AGE mas tive dificuldade em saber onde colocar algo do género que você escreveu:(estou a trabalhar com a ferramenta pgAdminIII)


int_idade =  SELECT EXTRACT (YEAR FROM AGE(CURRENT_DATE, dat_nascimento)) ;
Sim, o processo deverá actualizar o campo sempre que se acede à base de dados. P.ex. uma pessoa que faz anos a 1986-02-03, deverá aparecer neste momento que tem 24 anos mas daqui a 2 dias já tem 25 anos...
 
Responder

Gostei + 0

01/02/2011

George Santos

eu acho q seiria melhor fazer esse calculo do lado da aplicação e não no banco 
Responder

Gostei + 0

01/02/2011

Jair N.

Bem, já que se fez necessário, em sua tabela o campo "DATA_NASCIMENTO AS DATE" deverá calcular o campo IDADE_ATUAL  AS INTEGER

Aqui, a opção é fazer uma função para atualizar a base de dados, a exemplo:

-- DROP FUNCTION func_atualiza_idade ()
CREATE OR REPLACE FUNCTION func_atualiza_idade() RETURNS void AS $$
         UPDATE minha_tabela
            SET idade_atual = EXTRACT (YEAR FROM AGE(CURRENT_DATE, data_nascimento))
          WHERE idade_atual IS NULL
             OR idade_atual < EXTRACT (YEAR FROM AGE(CURRENT_DATE, data_nascimento));
$$ LANGUAGE SQL;

Bem, tu poderá criar uma função interna, para atualizar sua base toda vêz que logar ou inicializar a tabela

Execute esta função pelo seu PHP:

SELECT func_atualiza_idade();

Como disse, essa opção vai depender do seu executável, a não ser que você crie uma situação para ativação do processo dentro do banco de dados e esse seja ativado por um, digamos "temporizador" que quando a data for menor que a última processada execute...


Responder

Gostei + 0

02/02/2011

Margarida Martins

Problema resolvido.....muito obrigado pela ajuda....com as tuas dicas, a tua função e mais uma pesquisas consegui fazer o que pretendia.
Responder

Gostei + 0

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

Aceitar