Em uma tabela de banco de dados, criei um atributo de data, mas defini seu tipo como varchar
e não Date
. Minha pergunta é: ainda poderei comparar essas datas em uma consulta SQL?
As datas em meu banco de dados são armazenadas neste formato:
dd / mm / aaaa hh: mm: ss
Tenho que fazer uma consulta SQL em PHP que se parece com isto:
SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015";
“date” tem a seguinte aparência: 07/08/2015 15:15:02
Gostaria de receber um exemplo de como para fazer isso.
Comentários
Resposta
Dependendo de qual banco de dados você está usando, você deve ser capaz de converter a string para uma data e então fazer sua comparação.
ie no Sql Server
cast(date as datetime) >= "20150131" ...
Dito isso, eu normalmente recomendo armazenar a data como uma data, se possível, e se você precisar usar strings, Seria melhor usar um formato mais padronizado
, ou seja, "YYYY-mm-dd"
ou ainda melhor "YYYYmmdd"
em vez de "mm/dd/YYYY"
que, por exemplo, pode ser facilmente misturado up with "dd/mm/YYYY"
que é comum em muitas culturas. Veja esta postagem do blog: Maus hábitos para eliminar: manipulação incorreta de consultas de data / intervalo
Comentários
- e ' é geralmente recomendado usar uma fromat padrão para datas, como
'YYYY-mm-dd'
ou ainda melhor'YYYYmmdd'
e não o'mm/dd/YYYY'
que é ambíguo e sua interpretação pelo SQL-Server depende das configurações locais. - @ypercube, Concordo , atualizado.
Resposta
Há “uma pergunta de” Qual banco de dados você está usando? “
Cada RDBMS tem sua própria maneira de lidar com o problema.
Se for MySQL, use str_to_date:
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date
Isso converterá um varchar em uma data e possibilitará classificar a data corretamente. Classificar uma data como um tipo de dados varchar levará a algum comportamento inesperado.
dates
em vez de strings, há algum motivo para você não poder alterar a definição da tabela agora? Ou também está pedindo ajuda para fazer isso?