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 comment pour ce faire.
Commentaires
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 à prendre: 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.
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?