在这里需要帮助,有一个名为 APPROVAL 的mysql表,有一个id,dateandtime
和level, i
需要一个查询,单独选择id
以下条件。
仅从数据库中获取日期并将其与当前系统日期进行比较,如果天数超过 30 且 60 以及level = 5
以上。
如何为此编写查询。
提前致谢。
答案 0 :(得分:2)
MySQL有很好的日期算术。例如,表达式
CURDATE() + INTERVAL 30 DAY
给出一个日期时间值,表示午夜30天。同样
CURDATE() + INTERVAL 61 DAY
在第61天产生午夜。
所以查询表格
SELECT ID
FROM APPROVAL
WHERE Level = 5
AND `DateTime` >= CURDATE() + INTERVAL 30 DAY
AND `DateTime` < CURDATE() + INTERVAL 61 DAY
会产生你想要的东西。请注意>=
用于天数范围的开始,使用<
和额外的一天用于范围的结束。我们这样做是因为我们想要第60天的所有项目,而不是第61天的所有项目。
(Level, DateTime)
上的复合索引将使此查询非常有效地满足。
请注意表达式
DATE(`DateTime`) <= CURDATE() + INTERVAL 60 DAY /* slow! */
也会产生正确的结果,但是要对要搜索的列进行DATE()
函数调用会使其成为 unsargeable 。也就是说,它使MySQL无法使用索引来满足搜索。
答案 1 :(得分:1)
好的,请使用此查询检索与当前日期相比,匹配级别5和30到60之间的日期差异的所有ID。
SELECT id
FROM APPROVAL
WHERE level = 5 && DATEDIFF(NOW(), dateandtime) BETWEEN 30 AND 60
我建议你订购他们和DESC约会。
希望有所帮助
答案 2 :(得分:0)