我正在使用数据库表,其中包含以下详细信息:
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)";
答案 0 :(得分: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()";
认为它会起作用。感谢。
答案 1 :(得分: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
进行比较,转换为秒。
答案 2 :(得分:1)
SELECT * FROM table1 WHERE time BETWEEN CURTIME() AND TIME(DATE_SUB(NOW(), INTERVAL 30 MINUTE))
希望这可以帮到你
答案 3 :(得分:0)
检查
SELECT * FROM table1
WHERE date=CURDATE() AND TIME_TO_SEC(time) > TIME_TO_SEC(CURRENT_TIME()) - 1800
答案 4 :(得分:0)
Select * from table1 where concat (date, ' ', time) > ( now() - interval 30 minute)