在10分钟内选择MySQL行

时间:2015-03-13 15:38:39

标签: mysql

我正在存储这样的数据:

Time - Date
13:20:20 - 2015-03-13

我想在10分钟内选择MySQL条目。所以如果我执行13:00它将是12:50-13:00。

我花了很多时间研究如何使用-interval x minutes,(now)函数等,它只是不起作用......可能是我存储的数据很糟糕(varchar类型)或时区服务器提供商的问题

我在想SELECT WHERE Time < - 60 seconds AND Date = '2015-03-13'

但它不起作用。所有的帮助在这里赞赏。

1 个答案:

答案 0 :(得分:0)

您就是这样做的。现在不要这样做。 严肃地说,看看如何在下面进行操作,但回过头来改变将日期存储为日期时间类型列的方式。它让你的生活变得更轻松,每个从你那里继承你的应用程序的人(即使它从现在起一年后变得更聪明)也不会让你讨厌让他们做额外的工作。

create table mytmp
(
    mydate varchar(10),
    mytime varchar(8)
);

insert into mytmp
values ('2015-01-01', '01:23:45');
insert into mytmp
values ('2015-01-01', '01:24:45');
insert into mytmp
values ('2015-01-01', '01:25:45');


select *
from mytmp
where STR_TO_DATE(CONCAT(mydate, ' ', mytime), "%Y-%m-%d %H:%i:%S") > (now() - INTERVAL 10 minute);

select *
from mytmp
where STR_TO_DATE(CONCAT(mydate, ' ', mytime), "%Y-%m-%d %H:%i:%S") > (now() - INTERVAL 1 year);

drop table my tmp;

关键是首先使用STR_TO_DATE将字符串日期转换为日期时间格式。 STR_TO_DATE需要一个设置格式,以便它可以解释字符串的哪些部分代表日期时间类型的哪些部分(分钟,天,年等),因此您需要指定格式字符串。我使用CONCAT函数将您的日期和时间列连接到一个字符串中来执行此操作。现在,INTERVAL操作将在您比较相似或兼容类型时起作用。

您可以在此处找到MySQL的格式字符串:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

编辑:您想要的格式字符串是&#39;%H:%i:%s - %Y-%m-%d&#39;通过外观。