Próbowałem zrobić SELECT DATE(ColumnName)
, ale to nie działa w przypadku TIMESTAMP
kolumn †, ponieważ są one przechowywane w UTC, a data UTC jest używana zamiast konwertowania na datę lokalną. Musiałem wybrać wiersze, które były w określonym dniu w mojej strefie czasowej, więc łącząc moją odpowiedź na to drugie pytanie z odpowiedzią Balaswamy Vaddeman na to pytanie , oto co zrobiłem:
Jeśli przechowujesz daty jako DATETIME
Po prostu zrób SELECT DATE(ColumnName)
Jeśli przechowujesz daty jako TIMESTAMP
Załaduj dane strefy czasowej do MySQL, jeśli jeszcze tego nie zrobiłeś. W przypadku serwerów Windows zobacz poprzednie łącze. W przypadku serwerów Linux, FreeBSD, Solaris i OS X należy:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Następnie sformatuj zapytanie w ten sposób:
SELECT DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York'))
Możesz również umieścić to w WHERE
części zapytania takiej jak ta (ale pamiętaj, że indeksy w tej kolumnie nie będą działać):
SELECT * FROM tableName
WHERE DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York')) >= '2015-02-04'
(Oczywiście należy zastąpić America/New_York
lokalną strefę czasową).
† Jedynym wyjątkiem jest sytuacja, gdy lokalna strefa czasowa to GMT i nie robisz czasu letniego, ponieważ Twój czas lokalny jest taki sam jak UTC.