首页 >数据库 >mysql教程 >如何在忽略年份的情况下高效查找未来 14 天内的周年纪念日?

如何在忽略年份的情况下高效查找未来 14 天内的周年纪念日?

DDD
DDD原创
2025-01-03 09:53:43410浏览

How to Efficiently Find Anniversaries Within the Next 14 Days, Ignoring the Year?

如何在日期数学中忽略年份

问题:
选择具有周年纪念日的日期未来 14 天,不包括年份

原始查询:

SELECT * FROM events
WHERE EXTRACT(month FROM "date") = 3
AND EXTRACT(day FROM "date") < EXTRACT(day FROM "date") + 14

问题:
月份换行,因此此查询可能会错过在当前结束

解决方案:

1.使用生成系列:

SELECT * FROM events
WHERE (date > '2013-03-01' AND date < '2013-04-01')

此查询通过显式指定日期范围来忽略年份。不过,对于不同的周年纪念时段,它并不灵活。

2.使用日期数学:

SELECT event_date FROM event_table
WHERE (event_date >= CURRENT_DATE AND event_date <= CURRENT_DATE + INTERVAL '14 days');

此查询使用日期数学来计算周年日期范围。它更灵活,但对于大型表可能执行速度较慢。

3.使用函数(推荐):

CREATE FUNCTION get_anniversary(date date) RETURNS date AS
BEGIN
  RETURN date PARTITION BY YEAR;
END;

SELECT event_date FROM event_table
WHERE get_anniversary(event_date) >= CURRENT_DATE
AND get_anniversary(event_date) <= CURRENT_DATE + INTERVAL '14 days';

此查询使用函数从日期中删除年份。它为每个唯一的年份创建一个分区,从而使大型表的速度更快。

以上是如何在忽略年份的情况下高效查找未来 14 天内的周年纪念日?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn