Como comparar as datas do timestamp com o parâmetro apenas de data no MySQL?
numa declaração SQL, como comparo uma data gravada como data-limite com uma data no formato AAAA-MM-DD?
ex.: SELECT * FROM table WHERE timestamp = '2012-05-05'
quero que esta pesquisa devolva todas as linhas com a data-limite no dia indicado, mas só devolve as linhas com a hora-limite da meia-noite.
Obrigado.8 answers
Pode usar a função DATE()
para extrair a parte da data do intervalo de tempo:
SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-05'
No entanto, se você tem um índice na coluna do timestamp, isso seria mais rápido porque ele poderia utilizar o índice:
SELECT * FROM table
WHERE timestamp BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00'
AND timestamp <= '2012-05-05 23:59:59'
WHERE cast(timestamp as date) = '2012-05-05'
Utilize uma função de conversão de MYSQL:
SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05'
Isto deve funcionar
Use
SELECT * FROM table WHERE DATE(2012-05-05 00:00:00) = '2012-05-05'
No caso de estar a usar parâmetros SQL para executar a consulta, então isto seria útil
SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59')
SELECT *
FROM table
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');
Como sugerido por alguns, ao usar DATE(timestamp)
está a aplicar manipulação à coluna e, por isso, não pode confiar na ordenação do Índice.
No entanto, a utilização de BETWEEN
só seria fiável se incluísse os milisegundos. No exemplo timestamp BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
, você exclui os registos com um timestamp entre 2012-05-05 23:59:59.001
e 2012-05-05 23:59:59.999
. No entanto, mesmo este método tem alguns problemas, por causa da precisão datatypes. Ocasionalmente, 999 milisegundos são arredondados.
SELECT * FROM table
WHERE date>='2012-05-05' AND date<'2012-05-06'