选择具有日期/时间类型的行的正确方法

时间:2017-09-28 09:35:59

标签: mysql

我有这个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();

我尝试了此查询但返回空。

什么是正确的查询?

3 个答案:

答案 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()

链接位于

之下

adddate() msql

now() mysql