Question intéressante, parce que pour bien faire les choses, vous devez obtenir les anniversaires restants pour cette année, puis passer à l'année prochaine. Quelque chose comme:
Select ...
From 'Table'
Where DayOfYear(BirthDate) >= DayOfYear(CurDate())
Order By DayOfYear(BirthDate)
union
Select ...
From 'Table'
Where DayOfYear(BirthDate) < DayOfYear(CurDate())
Order By DayOfYear(BirthDate)
EDIT En pensant à cela, vous fait ne besoin d'utiliser le cassé sur « mois » et « jour » champs au lieu de simplement regarder DayOfYear; sinon, vous obtiendrez la mauvaise réponse si cette année est bissextile et que la personne est née dans une année non bissextile (ou vice versa). C'est parce que nous considérons notre anniversaire comme étant le «1er mars», pas «le 60e jour de l'année».
Et, bien sûr, vous ne pouvez pas utiliser différents « trier par » clauses dans les deux moitiés de l'UNION ...
Donc, quelque chose comme:
Select 1,mon,day,name
From 'Table'
Where mon > Month(CurDate())
or ((mon = Month(CurDate()))
and (day >= DayOfMonth(CurDate())))
union
Select 2,mon,day,name
From 'Table'
Where mon < Month(CurDate())
or ((mon = Month(CurDate()))
and (day < DayOfMonth(CurDate())))
Order By 1,2,3