我有一个查询,该查询接受接下来的5个有生日的人。
SELECT *
FROM `user`
WHERE DATE_FORMAT(birth_date, '%m-%d') > date_format(curdate(), '%m-%d')
ORDER BY DATE_FORMAT(birth_date, '%m-%d')
LIMIT 5
做得很好,但是在12 december
这样的情况下,第二年的员工january
并没有受到影响。
我该怎么办?
答案 0 :(得分:2)
您的查询无效,原因是: 1.您只比较月份和日期,而不比较年份。您还应该比较年份 2.您应该计算下一个生日。
例如:
An unexpected error has occurred
答案 1 :(得分:1)
基本上,您只需要计算月份,然后将大于或等于当前月份的所有月份加12,这应该给您递归的月份顺序:
select name,
month(STR_TO_DATE(birth_date, "%m-%d")) AS birth_month,
if(
month(STR_TO_DATE(birth_date, "%m-%d")) >= month(now()),
month(STR_TO_DATE(birth_date, "%m-%d")),
month(STR_TO_DATE(birth_date, "%m-%d")) + 12
) month_order
from `user`
order by month_order
limit 5
如果您使用的是STR_TO_DATE
,则不需要DATETIME
注意:该功能已连续多年无法使用。就在明年。