Tentei fazer um SELECT DATE(ColumnName)
, mas isso não funciona para as TIMESTAMP
colunas † porque elas são armazenadas em UTC e a data UTC é usada em vez de converter para a data local. Eu precisava selecionar as linhas que estavam em uma data específica no meu fuso horário, combinando minha resposta a esta outra pergunta com a resposta de Balaswamy Vaddeman a esta pergunta , eis o que fiz:
Se você estiver armazenando datas como DATETIME
Apenas faça SELECT DATE(ColumnName)
Se você estiver armazenando datas como TIMESTAMP
Carregue os dados de fuso horário no MySQL, caso ainda não tenha feito isso. Para servidores Windows, consulte o link anterior. Para servidores Linux, FreeBSD, Solaris e OS X, você faria:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Em seguida, formate sua consulta assim:
SELECT DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York'))
Você também pode colocar isso na WHERE
parte da consulta como este (mas observe que os índices nessa coluna não funcionarão):
SELECT * FROM tableName
WHERE DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York')) >= '2015-02-04'
(Obviamente, substitua America/New_York
seu fuso horário local.)
† A única exceção é se seu fuso horário local for GMT e você não fizer o horário de verão porque seu horário local é o mesmo que UTC.