Requête SQL où() date de l'année est de $année
Je enregistrer des dates dans ma base de données dans une colonne de date
type de données.
Disons que j'ai de la colonne date
où je stocke les données comme ceci "2011-01-01", "2012-01-01", "2012-02-02" etc.
Maintenant, j'ai besoin de faire de SQL qui sélectionne uniquement les lignes où date
est égal à 2012
SELECT * FROM table WHERE date=hasSomehowYearEqualTo=2012
Quelle serait la requête?
OriginalL'auteur simPod | 2012-02-08
Vous devez vous connecter pour publier un commentaire.
Ne PAS utilisation
YEAR(date)
- cela permettra de calculerYEAR(date)
pour toutes les dates, même pour ceux que vous n'utilisez jamais. Il fera également l'utilisation d'un indice impossible pire des cas sur la DB de la couche.Utilisation
Comme une règle générale: Si vous avez le choix entre un calcul sur une constante et un calcul sur un champ, utilisez l'ancien.
WHERE `date` LIKE '$year-%'
.C'est tout aussi mauvais! il crée la représentation de Chaîne pour toutes les dates, aucun indice ... si vous avez le choix entre un calcul sur une constante et un calcul sur un champ, utiliser l'ancien. COMME est un calcul sur le champ!
C'est certainement la meilleure solution. Surtout si vous avez de l'indexation sur la date.
Je reçois le même plan d'exécution pour les deux quand je fais un
EXPLAIN
. Il semble que MySQL est assez intelligent pour comprendre, pour les dates.Le plan d'exécution montre un indice utilisé?
OriginalL'auteur Eugen Rieck
Découvrez la
ANNÉE()
docs fonction de MySQLOriginalL'auteur Gabriele Petrioli
select * from table where DATEPART(ANNÉE, le[DATE])=2012
OriginalL'auteur user868322