这个问题的关键是订购东西,而不是在哪里使用.这可以防止在年底出现问题.
因此,逻辑是将MM-DD生日的所有内容放在当前日期之前或之后,然后是生日的其余部分,按日期顺序排列:
select p.*
from participants
order by (case when date_format(STR_TO_DATE(birthday, %n/%j/%Y), '%m-%d') >= date_format(now(), '%m-%d')
then 0 else 1
end),
date_format(STR_TO_DATE(birthday, %n/%j/%Y), '%m-%d')
limit 5;
编辑:
如果你需要转换生日:
select p.*
from participants
order by (case when date_format(birthdate, '%m-%d') >= date_format(now(), '%m-%d')
then 0 else 1
end),
date_format(birthdate, '%m-%d')
limit 5;