针对损坏小时数据的动态sql查询

时间:2015-03-05 09:14:35

标签: mysql sql mysql-workbench

考虑一个名为“Books”的表,每隔一小时就会以UTC格式创建一个新条目。我想在当地时区获取最近24小时的数据(24个条目)。

我试过这个

select * from books where created_at >= DATE_SUB(NOW(),INTERVAL 24 HOUR); 

如何在没有在mysql中设置时区的情况下在过去24小时内在运行时获取记录?此外,创建的数据属于三个不同的id,我需要属于id = 1的数据。

3 个答案:

答案 0 :(得分:1)

EDITED )试试这个:

   select * from books
   where DAYOFMONTH(DATE(created_at))<>DAYOFMONTH(NOW())
   order by DATE(created_at) desc
   limit 24;

现在,如果要更改时区,对于会话,请使用此查询:

   SET GLOBAL TIME_ZONE = 'ASIA/CALCUTTA'

但唯一的缺点是每次重启MySQL时都必须编写它。

要永久更改它,请将以下内容放入mysql服务器配置中(例如my.cnf):

   default-time-zone=ASIA/CALCUTTA

剩下的唯一最后一个选项是查询本身的转换:

    select convert_tz(created_at,'UTC', 'ASIA/CALCUTTA ') MyTimeZone from books
    where DAYOFMONTH(DATE(created_at))<>DAYOFMONTH(NOW())
    order by MyTimeZone desc
    limit 24;

答案 1 :(得分:0)

试试这个:

SELECT * FROM books WHERE created_at > DATE_SUB(NOW(),INTERVAL 24 HOUR);

答案 2 :(得分:0)

我想对Sagar Joon回答发表评论,但我不能这样做,我正在单独添加:

select * from books
where DATE(created_at) < date(now())
order by DATE(created_at) desc
limit 24;