A seguinte consulta:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
não retorna nada.
Eu deveria ter dados mais do que suficientes para que a consulta funcionasse. O que estou fazendo de errado?
min
emax
são considerados dentro do intervalo, para não processar duas vezes por data que seja o valormin
emax
(caso de aresta). Por exemplo, a data2010-09-29 00:00:00
será entre2010-09-28 00:00:00
e2010-09-29 00:00:00
, E TAMBÉM entre2010-09-29 00:00:00
e2010-09-30 00:00:00
Respostas:
Sua segunda data é anterior à sua primeira data (ou seja, você está consultando entre 29 de setembro de 2010 e 30 de janeiro de 2010). Tente reverter a ordem das datas:
fonte
where
cláusula deve funcionar da mesma formaselect
ou emupdate
declarações.Sua consulta deve ter data como
experimentar
fonte
É
date_field
do tipodatetime
? Você também precisa colocar a data do aquecedor em primeiro lugar.Deveria ser:
fonte
DATE () é uma função do MySQL que extrai apenas a parte da data de uma expressão de data ou data / hora
fonte
Como extensão à resposta de @sabin e uma dica se alguém quiser comparar apenas a parte da data (sem a hora):
Se o campo a comparar for do tipo datetime e somente as datas forem especificadas para comparação, essas datas serão convertidas internamente em valores de datetime . Isso significa que a seguinte consulta
será convertido para
internamente.
Por sua vez, isso resulta em um resultado que não inclui os objetos de 29/09/2010 com um valor de tempo maior que 00:00:00!
Portanto, se todos os objetos com data 29/09/2010 também devem ser incluídos, o campo para comparar deve ser convertido em uma data:
fonte
Você pode fazer isso manualmente, comparando com maior que ou igual e menor que ou igual.
Em nosso exemplo, precisamos recuperar dados de um determinado dia a dia. Compararemos do início do dia ao último segundo em outro dia.
fonte
Pode haver um problema com a configuração da data no servidor ou no cliente. Descobri que esse é um problema comum em vários bancos de dados quando o host está configurado em espanhol, francês ou qualquer outra coisa ... que possa afetar o formato dd / mm / aaaa ou mm / dd / aaaa.
fonte
Basta converter date_field como data
fonte
Ao usar valores de Data e Hora, você deve converter os campos como
DateTime
e nãoDate
. Experimentar :fonte
Tente mudar as datas:
fonte