Problema:
Você gostaria de obter a diferença, em dias, entre duas datas em um banco de dados MySQL.
Exemplo:
Nosso banco de dados tem uma tabela chamada
food
com dados nas colunas id
, name
, purchase_date
e expiration_date
. id | nome | data_compra | data_de expiração |
---|---|---|---|
1 | pão | 20-07-2019 | 22-08-2019 |
2 | manteiga | 2018-07-30 | 2019-08-10 |
3 | leite | 2019-01-12 | 2019-01-13 |
4 | iogurte | 25-02-2019 | 24-02-2019 |
Para cada produto alimentício, vamos obter o nome do produto e o número de dias entre a data de vencimento e a data de compra.
Solução:
Usaremos o
DATEDIFF()
função. Aqui está a consulta que você escreveria:SELECT name, DATEDIFF(expiration_date, purchase_date) AS days FROM food;
Segue o resultado da consulta:
nome | dias |
---|---|
pão | 33 |
manteiga | 376 |
leite | 1 |
iogurte | -1 |
Discussão:
Use o
DATEDIFF()
função para recuperar o número de dias entre duas datas em um banco de dados MySQL. Esta função recebe dois argumentos:- A data de término. (No nosso exemplo, é a
expiration_date
coluna.) - A data de início. (No nosso exemplo, é o
purchase_date
coluna.)
Esses argumentos podem ser valores de data/datahora, expressões que retornam valores de data/datahora ou colunas do tipo de dados datahora ou data.
Esta função subtrai a data de início da data de término e retorna o número de dias como um número inteiro. Em nosso exemplo, manteiga foi comprado em '2018-07-30', mas sua data de validade era '2019-08-10'; após a compra, pode ser consumido durante 376 dias. Observe que o iogurte foi adquirido como um produto desatualizado:a diferença em dias é de -1 e sua data de compra é posterior à data de validade.