Como comparar datas no SQL?

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

  • edite e marque sua pergunta para nos dizer qual produto de banco de dados você está usando (por exemplo, MySQL e versão). Além disso, como é sempre melhor armazenar datas como 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?
  • Você consegue alterar o atributo de data para datetime? Armazenar datas como varchar é problemático. Você se deparará com situações em que os dados armazenados não são uma data válida. Você também estará continuamente convertendo de e para o datetime.

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *