我有一个包含字段生日
(DATE) 的用户表。
目前,我像这样选择生日在当前日期之前或之后 7 天内的用户:
SELECT * FROM users
WHERE
DATE_FORMAT(birthday, '1980-%m-%d')
BETWEEN
DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 7 day), '1980-%m-%d')
AND
DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 7 day), '1980-%m-%d')
如您所见,考虑到通过伪造的 1980 年日期格式进行的比较,此查询并不是最精简的。此外,我相信这将无法在一年的最后一周和第一周左右正确选择生日用户。
虽然我看到了这方面的问题,但我仍在努力寻找解决方法。我可以做些什么来改进这个查询?
试试这个过滤器 -
WHERE
birthday + INTERVAL EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM birthday) YEAR
BETWEEN CURRENT_DATE() - INTERVAL 7 DAY AND CURRENT_DATE() + INTERVAL 7 DAY
我是一名优秀的程序员,十分优秀!