MySQL查询27天前数据及到期提醒区间数据的实现方法
MySQL 查询问题解答
问题1:如何从MySQL中查询27天前的数据?
这个得看你具体的需求和字段类型来调整,分几种情况说:
如果你的日期字段是
DATE类型,或者只关心日期不看时间:- 要27天前当天的所有数据:
SELECT * FROM your_table WHERE date_column = DATE_SUB(CURDATE(), INTERVAL 27 DAY); - 要27天前及更早的所有数据:
SELECT * FROM your_table WHERE date_column <= DATE_SUB(CURDATE(), INTERVAL 27 DAY);
- 要27天前当天的所有数据:
如果字段是
DATETIME或TIMESTAMP类型,需要包含时间部分的话,就用NOW()代替CURDATE():-- 获取27天前此刻及更早的所有数据 SELECT * FROM your_table WHERE datetime_column <= DATE_SUB(NOW(), INTERVAL 27 DAY);要是你的日期字段存成了字符串(比如
'07/03/2018'这种格式),得先转成DATE类型再比较:SELECT * FROM your_table WHERE STR_TO_DATE(date_str_column, '%m/%d/%Y') = DATE_SUB(CURDATE(), INTERVAL 27 DAY);
问题2:如何添加到期提醒的时间条件?
先明确:你的核心需求是用户访问仪表盘时,当前日期在提醒开始日期(10/02/2018)到end_date当日之间,就显示这条提醒。分两种情况写语句:
情况1:固定提醒开始日期(针对你例子里的特定数据)
假设表名为your_table,如果end_date是DATE类型:
SELECT * FROM your_table WHERE CURDATE() BETWEEN '2018-02-10' AND end_date;
如果end_date是MM/DD/YYYY格式的字符串,得先转换格式:
SELECT * FROM your_table WHERE CURDATE() BETWEEN STR_TO_DATE('10/02/2018', '%m/%d/%Y') AND STR_TO_DATE(end_date, '%m/%d/%Y');
情况2:通用提醒规则(所有数据提前N天提醒)
如果你的需求是所有数据都按“提前N天开始提醒,直到到期日”的规则来(比如你例子里是提前25天),可以动态计算提醒开始时间:
-- 提前25天开始提醒,直到end_date当天 SELECT * FROM your_table WHERE CURDATE() BETWEEN DATE_SUB(end_date, INTERVAL 25 DAY) AND end_date;
这样不管每条数据的end_date是什么,都会自动算出对应的提醒区间,用户每天打开仪表盘时,只要当前日期在区间内,就能看到对应的到期提醒。
内容的提问来源于stack exchange,提问作者amit sutar
相关产品推荐
相关产品推荐

