0

我正在使用具有以下详细信息的数据库表:

Column Number | Column name | Data type
---------------------------------------------
1             | cardid      | int(5)
2             | price       | decimal(5,2)
3             | isbuyprice  | int(1)
4             | date        | date
5             | time        | time

现在,我想检索在过去 30 分钟内插入到表中的数据。我尝试使用以下代码,但它检索了我表的所有行:

"SELECT * FROM table1 WHERE time > (now() - INTERVAL 30 MINUTE)";
4

5 回答 5

1
"SELECT * FROM table1 WHERE time > (time(now()) - INTERVAL 30 MINUTE) 
 and date=CURDATE()";

最好的解决方案是,如果您能够更改数据库表,然后将日期字段更改为时间戳并删除时间字段。那么上面的查询将起作用。否则将以下代码与您当前的数据库结构一起使用。

"SELECT * FROM table1 WHERE time > time(time(now())-interval 30 minute) 
 and date=CURDATE()";

认为它会起作用。谢谢。

于 2013-02-11T07:35:59.520 回答
1

您有两个单独的字段,一个用于日期,一个用于时间,因此您可以使用以下内容:

SELECT *
FROM table1
WHERE
  UNIX_TIMESTAMP(date) + TIME_TO_SEC(time) >=
  UNIX_TIMESTAMP(NOW() - INTERVAL 30 MINUTE)

UNIX_TIMESTAMP将转换date为自 1970-01-01 以来的秒数,我们将时间部分的秒数与 相加time_to_sec,并将结果与NOW()-INTERVAL 30 MINUTE​​转换为秒数进行比较。

于 2013-02-11T08:29:19.213 回答
1
SELECT * FROM table1 WHERE time BETWEEN CURTIME() AND  TIME(DATE_SUB(NOW(), INTERVAL 30 MINUTE))

希望这可以帮到你

于 2013-02-11T08:55:09.573 回答
0

检查这个

SELECT * FROM table1 
WHERE date=CURDATE() AND TIME_TO_SEC(time) > TIME_TO_SEC(CURRENT_TIME()) - 1800
于 2013-02-11T07:41:34.290 回答
0
Select * from table1 where concat (date, ' ', time) > ( now() - interval 30 minute) 
于 2013-02-11T08:42:39.503 回答