Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Essa é a primeira lista de exercícios que o professor passa e estou tendo um pouco de dificuldade na hora de calcular a idade dos clientes. Já procurei em diversos fóruns e testei tudo que achei, porém a idade está vindo como NULL.
O Cliente tem os seguintes atributos:
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| IDCli | int(11) | NO | PRI | NULL | |
| NomeCLi | varchar(45) | NO | | NULL | |
| SobrenomeCli | varchar(45) | NO | | NULL | |
| EnderecoCli | varchar(45) | YES | | NULL | |
| TelefoneCli | varchar(45) | YES | | NULL | |
| DT_Nasc | varchar(45) | NO | | NULL | |
+--------------+-------------+------+-----+---------+-------+
e eu inseri a mesma data de nascimento para todos:
update Cliente set DT_Nasc = '01/01/1990';
e estou tentando calcular a idade para cada um:
SELECT NomeCli, DATE_FORMAT( NOW( ) , '%Y' ) -
DATE_FORMAT( DT_Nasc, '%Y' ) -
( DATE_FORMAT( NOW( ) , '00-%m-%d' ) <
DATE_FORMAT( DT_Nasc, '00-%m-%d' ) ) AS Idade FROM Cliente;
essa foi minha última tentativa e o valor de idade continua sendo NULL... tenho que retornar só os que são maiores de idade mas preciso resolver isso antes de tudo. AGradeço se alguém puder me ajudar :D
Nossa que burrice a minha, jurava que tinha deixado como DATE :(
Fiz a alteração e no campo idade está aparecendo 2016, sinto q é coisa boba mas realmente n sei identificar, esse é meu primeiro contato com a linguagem
Obrigada pela ajuda!
A função DATE_FORMAT() transforma uma data em texto, o ideal é trabalhar com o formato DATE mesmo, existem várias funções de manipulação de datas. (neste link, funções de tempo e data no manual - em inglês)
Veja sobre a função TIMESTAMPDIFF(): descobre a diferença entre duas datas.
Deu certo! O meu outro erro era q eu estava armazenando as datas no formato dd/mm/yyyy e o do mysql é yyyy-mm-dd. Muito obrigada! :)
Fiz assim:
select NomeCli,TIMESTAMPDIFF(YEAR,Cliente.DT_Nasc,curdate()) as Idade FROM Cliente;
Altere o tipo de dado para DATE, use o padrão "ano-mês-dia" pra facilitar. (aaaa-mm-dd, ou no banco de dados %Y-%-%d)
Utilizar funções de data num campo de texto não funciona como muita gente gostaria.
____
Resumindo... Só altere o tipo do campo pra DATE.