如何在日期数学中忽略年份
问题:
选择具有周年纪念日的日期未来 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中文网其他相关文章!