Я пробовал сделать SELECT DATE(ColumnName)
, но это не работает для TIMESTAMP
столбцов †, потому что они хранятся в формате UTC, а дата в формате UTC используется вместо преобразования в местную дату. Мне нужно было выбрать строки, относящиеся к определенной дате в моем часовом поясе, поэтому, объединив мой ответ на этот другой вопрос с ответом Баласвами Ваддемана на этот вопрос , я сделал следующее:
Если вы храните даты как DATETIME
Просто сделать SELECT DATE(ColumnName)
Если вы храните даты как TIMESTAMP
Загрузите данные часового пояса в MySQL, если вы еще этого не сделали. Для серверов Windows см. Предыдущую ссылку. Для серверов Linux, FreeBSD, Solaris и OS X вы должны:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Затем отформатируйте свой запрос следующим образом:
SELECT DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York'))
Вы также можете поместить это в WHERE
часть запроса, подобную этой (но обратите внимание, что индексы в этом столбце не будут работать):
SELECT * FROM tableName
WHERE DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York')) >= '2015-02-04'
(Очевидно, замените America/New_York
ваш местный часовой пояс.)
† Единственным исключением является случай, если ваш часовой пояс - GMT, и вы не переходите на летнее время, потому что ваше местное время совпадает с UTC.