我有这个steps
表。
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| industry_id | varchar(2) | NO | | NULL | |
| offset | int(11) | NO | | NULL | |
| create_date | datetime | YES | | NULL | |
| flg | char(1) | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
这些是样本数据(我只会添加几个);
+--------+-------------+--------+---------------------+------+
| id | industry_id | offset | create_date | flg |
+--------+-------------+--------+---------------------+------+
| 108587 | 12 | 1 | 2017-09-28 05:43:58 | 1 |
| 108588 | 12 | 51 | 2017-09-28 05:43:58 | 0 |
| 108589 | 12 | 101 | 2017-09-28 05:43:58 | 1 |
| 108590 | 12 | 151 | 2017-09-28 05:43:58 | 0 |
+--------+-------------+--------+---------------------+------+
我想通过create_date选择30分钟前添加并且flg = 0的数据。我尝试了不同的查询但失败了。
SELECT *
FROM steps
WHERE flg=0
and create_date BETWEEN DATE_SUB(NOW(), INTERVAL 30 MINUTE) AND NOW();
我尝试了此查询但返回空。
什么是正确的查询?
答案 0 :(得分:1)
你可能想要
Supplier
检索半小时前的记录。使用 create_date >= NOW() - INTERVAL 30 MINUTE
样式日期算术时,您不需要DATE_SUB()
。
但是,你可能会遇到时区混乱。试试这个问题:
INTERVAL
这将显示当前日期戳旁边的20个最新行。查看 SELECT NOW(), steps.create_date, steps.*
FROM steps
ORDER BY id DESC
LIMIT 20
的值是否与您在NOW()
列中看到的值相当。如果没有,请探索该列的数据类型,以及插入行与运行此查询的客户端连接的客户端连接的时区设置。
答案 1 :(得分:0)
试试这个:
SELECT *
FROM steps
WHERE flg = 0 AND create_date = NOW() - interval 30 minute
;
使用=
将检查整个日期,分钟和秒,
如果你需要一些范围 - 你必须使用between
:
create_date BETWEEN NOW() - interval 31 minute AND NOW() < interval 30 minute
答案 2 :(得分:-1)
尝试使用此
created_date >= DATE_ADD((now(), INTERVAL -15 MINUTE)) AND created_date < now()
链接位于
之下