Eu tenho uma tabela que contém uma coluna datetime. Desejo retornar todos os registros de um determinado dia, independentemente da hora. Ou, em outras palavras, se minha tabela contiver apenas os 4 registros a seguir, somente o 2º e o 3º serão retornados se eu limitar a 2012-12-25.
2012-12-24 00:00:00
2012-12-25 00:00:00
2012-12-25 06:00:00
2012-12-26 05:00:00
Respostas:
NUNCA use um seletor como
DATE(datecolumns) = '2012-12-24'
esse - é um ótimo desempenho:DATE()
para todas as linhas, incluindo aquelas que não correspondemÉ muito mais rápido usar
pois isso permitirá o uso do índice sem cálculo.
EDITAR
Como apontado por Used_By_Already, desde a resposta inicial em 2012, surgiram versões do MySQL, nas quais usar '23: 59: 59 'como final do dia não é mais seguro. Uma versão atualizada deve ler
A essência da resposta, ou seja, evitar um seletor em uma expressão calculada, é claro, ainda permanece.
fonte
WHERE col >= '2012-12-25' AND col < '2012-12-25' + INTERVAL 1 DAY
. Evita 0 tempo e trabalha paraDATE
,DATETIME
,DATETIME(6)
, etc. e lida com salto-dia, etc.... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
potencialmente pode funcionar melhor (se você tiver um índice em date_column) queDATE
.fonte
BETWEEN
solução ... alguém foi marcado?BETWEEN
é apenas uma maneira de escreverfield >= value1 and fied<= value2
.Você pode usar
%
:fonte