J'ai essayé de faire un SELECT DATE(ColumnName)
, mais cela ne fonctionne pas pour les TIMESTAMP
colonnes † car elles sont stockées en UTC et la date UTC est utilisée au lieu de la conversion en date locale. J'avais besoin de sélectionner des lignes qui étaient à une date spécifique dans mon fuseau horaire, donc en combinant ma réponse à cette autre question avec la réponse de Balaswamy Vaddeman à cette question , voici ce que j'ai fait:
Si vous stockez des dates sous DATETIME
Fais juste SELECT DATE(ColumnName)
Si vous stockez des dates sous TIMESTAMP
Chargez les données de fuseau horaire dans MySQL si vous ne l'avez pas déjà fait. Pour les serveurs Windows, consultez le lien précédent. Pour les serveurs Linux, FreeBSD, Solaris et OS X, procédez comme suit:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Puis formatez votre requête comme ceci:
SELECT DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York'))
Vous pouvez également mettre ceci dans la WHERE
partie de la requête comme ceci (mais notez que les index sur cette colonne ne fonctionneront pas):
SELECT * FROM tableName
WHERE DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York')) >= '2015-02-04'
(Évidemment, remplacez America/New_York
votre fuseau horaire local.)
† La seule exception à cela est si votre fuseau horaire local est GMT et que vous ne faites pas d'heure d'été car votre heure locale est la même que UTC.