5

您如何在完全不考虑年份的情况下查询您按生日排序的位置。我需要从今天的日期以 ASC 或 DESC 删除/忽略年份和 ORDER BY 生日月份和生日日期。

下面的方法不起作用,因为生日的年份开始起作用。以下示例显示了考虑年份时会发生什么:

John   01/02/1974
Billy  11/15/2000
Ally   06/25/2008

SELECT * FROM users ORDER BY birthdate

按生日订购时的预期结果:

John   01/02/1974
Ally   06/25/2008
Billy  11/15/2000
4

4 回答 4

6

编辑:@AaronBertrand 的评论是正确的,闰年的年份不成立。你可以使用他的解决方案。另一种方法是按月和天订购,例如:

SELECT * FROM users ORDER BY month(birthdate), day(birthdate)
于 2012-06-26T17:55:12.210 回答
4

这会将所有日期标准化为 2000 年:

ORDER BY DATEADD(YEAR, 2000-YEAR(birthday), birthday);

这将正确处理闰年婴儿。

于 2012-06-26T18:02:04.440 回答
1

尝试

SELECT * FROM users ORDER BY SUBSTRING(birthdate, 1, 5);
于 2012-06-26T17:56:16.167 回答
0

试试这个查询

它按升序排列生日

SELECT `id`, `teacher_name`, `phn_num`, `date_of_birth`, `date_of_birth` + INTERVAL(YEAR(CURRENT_DATE()) - YEAR(`date_of_birth`)) + 0 YEAR AS currbirthday, `date_of_birth` + INTERVAL(YEAR(CURRENT_DATE()) - YEAR(`date_of_birth`)) + 1 YEAR AS nextbirthday FROM `teacher_details` ORDER BY CASE WHEN currbirthday >= CURRENT_DATE() THEN currbirthday ELSE nextbirthday END
于 2018-08-04T11:09:42.330 回答