Comment devrais-je filtrer les dates dans MySQL?
Je suis de la création d'un ensemble de "l'archive" les pages qui sont spécifiés par année et par mois. Dans ma table j'ai un datetime
champ appelé posted
. Je veux sélectionner toutes les lignes qui sont dans un mois donné.
J'ai pensé à deux solutions:
(1) correspondance de chaîne:
SELECT ... WHERE posted LIKE '2009-06%'
(2) Utilisez MySQL extraction fonctions:
SELECT ... WHERE YEAR(posted)=2009 AND MONTH(posted)=6
Qui sera plus rapide, et quels sont les meilleures solutions?
OriginalL'auteur DisgruntledGoat | 2009-06-16
Vous devez vous connecter pour publier un commentaire.
Cela on va utiliser efficacement un index sur
posted
, contrairement à deux de vos requêtes.Notez que si votre gardaient
posted
comme unVARCHAR
, alors la requête suivante:serait d'utiliser l'index.
Hmm, je ne crois pas, comme vous l'avez fait Jette dans MySQL avec ENTRE les dates sur: dev.mysql.com/doc/refman/5.0/en/...
il serait de retour des dossiers qui tombent sur '2009-07-01 00:00:00' exactement pour les mois de juin et juillet requêtes. Il peut être un problème.
Merci, cela a fonctionné un régal. Pour une raison quelconque, il n'a pas eu lieu pour moi que je pourrais utiliser < > sélecteurs...
OriginalL'auteur Quassnoi
Mépris des réserves au sujet de cette conception, la syntaxe standard serait "ENTRE le premier jour ET le dernier jour", ou (si vous êtes en utilisant moins de la date de la granularité), "posté >= premier jour ET a posté < le dernier jour + 1".
OriginalL'auteur dkretz