【发布时间】:2019-12-15 22:10:59
【问题描述】:
我的表包含remind_me_befor_days 列和expiry_date 列。
我必须选择条件为(expiry_date - remind_me_befor_days) = current_date的记录。
如何通过查询来实现。任何人都可以帮助我吗? 提前致谢
【问题讨论】:
我的表包含remind_me_befor_days 列和expiry_date 列。
我必须选择条件为(expiry_date - remind_me_befor_days) = current_date的记录。
如何通过查询来实现。任何人都可以帮助我吗? 提前致谢
【问题讨论】:
你可以做日期算术:
select t.*
from mytable t
where t.expiry_date - interval t.remind_me_befor_days day = current_date
-- sample data
select * from mytable;
编号 |到期日期 |提醒我befor_days
-: | :------------ | ------------------:
1 | 2019-12-25 | 10
2 | 2019-12-25 | 5
-- query
select t.*, current_date
from mytable t
where t.expiry_date - interval t.remind_me_befor_days day = current_date
编号 |到期日期 |提醒我befor_days |当前的日期
-: | :------------ | -------------------: | :-----------
1 | 2019-12-25 | 10 | 2019-12-15
【讨论】:
要将其拆分为几个子问题,我们有:
expiry_date 列中减去您的remind_me_befor_days 列值。第一个可以使用 MySQL CURDATE() 函数完成。阅读更多here。将其与第二步和第三步相结合,您会得到类似的东西
SELECT *
FROM my_table
WHERE expiry_date - remind_me_befor_days = CURDATE()
【讨论】:
我强烈建议您将条件写成:
where expiry_date = curdate() + interval remind_me_before_days day
这是索引友好的,因此它可以使用expiry_date 上的索引。
【讨论】: