Tenho uma pergunta: é possível selecionar em um banco de dados MySQL comparando uma string DATE "2010-04-29" com as strings armazenadas como DATETIME (2010-04-29 10:00)?
Eu tenho um selecionador de data que filtra os dados e gostaria de consultar a tabela pelo campo DATETIME assim:
SELECT * FROM `calendar` WHERE startTime = '2010-04-29'"
... e eu gostaria de obter a linha que tem o valor DATETIME de "2010-04-29 10:00".
Alguma sugestão? Obrigado.
mysql
datetime
comparison
Manny Calavera
fonte
fonte
startTime
estiver indexada.Se você deseja selecionar todas as linhas em que a parte DATE de uma coluna DATETIME corresponde a um determinado literal, você não pode fazer desta forma:
porque o MySQL não pode comparar DATE e DATETIME diretamente. O que o MySQL faz, ele estende o literal DATE fornecido com a hora '00: 00: 00 '. Então sua condição se torna
Certamente não é o que você quer!
A condição é um intervalo e, portanto, deve ser fornecida como intervalo. Existem várias possibilidades:
Há uma pequena possibilidade de o primeiro estar errado - quando sua coluna DATETIME usa resolução de subsegundos e há um compromisso às 23:59:59 + epsilon. Em geral, sugiro usar a segunda variante.
Ambas as variantes podem usar um índice no startTime que se tornará importante quando a tabela crescer.
fonte
date()
,year()
,datediff()
ou qualquer semelhante)00:00:00
. agora meus resultados fazem sentidoOU
fonte
isso para o formato de data e hora no mysql usando
DATE_FORMAT(date,format)
.fonte
ajuda, você pode converter os valores como
DATE
antes de comparar.fonte
Você pode transmitir o campo DATETIME para DATE como:
Isso é muito eficiente.
fonte
startTime
estiver indexadoVocê também pode usar operadores de comparação nas datas do MySQL se quiser encontrar algo antes ou depois. Isso ocorre porque eles são escritos de tal forma (do maior ao menor valor com zeros à esquerda) que uma simples classificação de string os classificará corretamente.
fonte