Retornando dia, mês e ano entre duas datas em mysql/mariadb. Fiz a query mas como diminuir, aperfeiçoar?
Alguém consegue melhorar isso, criei esta query para retornar dia, mês e ano direto do mysql/MariaDb sem precisar programar nada mas achei muito grande apesar de ter ficado bem rápido. Alguém se habilita em melhorar? Grato
SELECT TIMESTAMPDIFF(year,datanasc,NOW()) AS anos,
if(TIMESTAMPDIFF(year,datanasc,NOW())=0,TIMESTAMPDIFF(month,datanasc,now()),TIMESTAMPDIFF(month,datanasc,now())-TIMESTAMPDIFF(year,datanasc,NOW())*12 )as meses,
if(TIMESTAMPDIFF(day,concat(year(curdate()),"-",month(now()),"-",day(datanasc)),NOW())>0,
TIMESTAMPDIFF(day,concat(year(curdate()),"-",month(now()),"-",day(datanasc)),NOW()),
if(TIMESTAMPDIFF(day,concat(year(curdate()),"-",month(ADDDATE(NOW(), INTERVAL -1 MONTH)),"-",day(datanasc)),now())>0,
TIMESTAMPDIFF(day,concat(year(curdate()),"-",month(ADDDATE(NOW(), INTERVAL -1 MONTH)),"-",day(datanasc)),now()),
TIMESTAMPDIFF(day,concat(year(curdate())-1,"-",month(ADDDATE(NOW(), INTERVAL -1 MONTH)),"-",day(datanasc)),now())) ) as dia
from cliente
SELECT TIMESTAMPDIFF(year,datanasc,NOW()) AS anos,
if(TIMESTAMPDIFF(year,datanasc,NOW())=0,TIMESTAMPDIFF(month,datanasc,now()),TIMESTAMPDIFF(month,datanasc,now())-TIMESTAMPDIFF(year,datanasc,NOW())*12 )as meses,
if(TIMESTAMPDIFF(day,concat(year(curdate()),"-",month(now()),"-",day(datanasc)),NOW())>0,
TIMESTAMPDIFF(day,concat(year(curdate()),"-",month(now()),"-",day(datanasc)),NOW()),
if(TIMESTAMPDIFF(day,concat(year(curdate()),"-",month(ADDDATE(NOW(), INTERVAL -1 MONTH)),"-",day(datanasc)),now())>0,
TIMESTAMPDIFF(day,concat(year(curdate()),"-",month(ADDDATE(NOW(), INTERVAL -1 MONTH)),"-",day(datanasc)),now()),
TIMESTAMPDIFF(day,concat(year(curdate())-1,"-",month(ADDDATE(NOW(), INTERVAL -1 MONTH)),"-",day(datanasc)),now())) ) as dia
from cliente
Luis Miguel
Curtidas 0
Melhor post
Luiz Vichiatto
09/01/2018
Olá Luiz
Isso pode ser escrito em uma function no caso do mysql, no mariadb não conheço. Neste caso se tem os mesmos padrões do mysql deve permitir .
Isso pode ser escrito em uma function no caso do mysql, no mariadb não conheço. Neste caso se tem os mesmos padrões do mysql deve permitir .
GOSTEI 1
Mais Respostas
Luis Miguel
08/01/2018
Obrigado luiz, mas o desafio é criar sem procedimentos ou funções.
GOSTEI 0
Luiz Vichiatto
08/01/2018
Obrigado luiz, mas o desafio é criar sem procedimentos ou funções.
Luiz Miguel
As vezes refatorar uma consulta não exige apenas melhorar um select, é utilizar os recursos que o banco de dados nos oferece, entender esta parte é essencial para um bom funcionamento do conjunto aplicação+banco de dados.
Nem sempre a solução é simples, ou fácil, cada dia aprendemos.
Aprofunde um pouco nos conhecimentos do banco que acredito que você criará uma solução que apresentará uma boa solução para resolver o problema.
Abraços e sucesso....
GOSTEI 0