动态 sql 查询断时数据

Dynamic sql query for broken hours data

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

我试过了

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

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

的数据

(已编辑)试试这个:

   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;

试试这个:

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

我想对 Sagar Joon 的回答发表评论,但我不能,所以我添加了单独的一个:

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