Comment comparer des dates en SQL?

Dans une table de base de données, jai créé un attribut de date, mais jai défini son type sur varchar et non Date. Ma question est: est-ce que je pourrai toujours comparer ces dates dans une requête SQL?

Les dates de ma base de données sont stockées dans ce format:

jj / mm / aaaa hh: mm: ss

Je dois faire une requête SQL en PHP qui ressemble à ceci:

SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015"; 

« date » ressemble à ceci: 07/08/2015 15:15:02

Japprécierais un exemple de la façon dont pour ce faire.

Commentaires

  • Veuillez modifier et marquez votre question pour nous indiquer le produit de base de données que vous utilisez (par exemple MySQL et sa version). De plus, comme il est toujours préférable de stocker les dates sous dates plutôt que sous forme de chaînes, y a-t-il une raison pour laquelle vous ne pouvez pas modifier la définition de la table maintenant? Ou demandez-vous également de laide pour cela?
  • Pouvez-vous changer lattribut de date en datetime? Le stockage des dates comme varchar est problématique. Vous rencontrerez des situations où des données sont stockées qui ne sont pas une date valide. Vous effectuerez également une conversion continue vers et depuis datetime.

Réponse

Selon la base de données que vous utilisez, vous devriez pouvoir convertir la chaîne en une date, puis faire votre comparaison.

ie dans Sql Server

cast(date as datetime) >= "20150131" ... 

Cela dit, je « recommanderais généralement de stocker la date sous forme de date si possible, et si vous avez besoin dutiliser des chaînes, Il serait préférable d’utiliser un format plus standardisé

ie "YYYY-mm-dd" ou encore mieux "YYYYmmdd" au lieu de "mm/dd/YYYY" qui, par exemple, peut être facilement mélangé avec "dd/mm/YYYY" qui est commun dans de nombreuses cultures. Voir ce billet de blog: Mauvaises habitudes à éliminer: mauvaise gestion des requêtes de date / plage

Commentaires

  • et il ' est généralement recommandé dutiliser un fromat standard pour les dates, comme 'YYYY-mm-dd' ou encore mieux 'YYYYmmdd' et non le 'mm/dd/YYYY' qui est ambigu et son interprétation par SQL-Server dépend des paramètres locaux.
  • @ypercube, Daccord , mis à jour.

Réponse

Il ya « une question » Quelle base de données utilisez-vous? « 

Chaque SGBDR a sa propre façon de gérer le problème.

Si cest MySQL, utilisez str_to_date:

https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

Cela convertira un varchar en une date et permettra de trier correctement la date. Le tri dune date en tant que type de données varchar entraînera un comportement inattendu.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *