按生日排序,无视年份

Pat*_*tec 4 sql t-sql sql-server-2005 sql-server-2008

如何在ORDER BY生日的情况下查询完全无视年份的情况.我需要在今天的ASC或DESC中消除/忽视年份和ORDER BY出生日期和出生日期.

以下内容不起作用,因为生日的年代发挥作用.下面的例子显示了当年度被认为会发生什么:

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

SELECT * FROM users ORDER BY birthdate
Run Code Online (Sandbox Code Playgroud)

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

John   01/02/1974
Ally   06/25/2008
Billy  11/15/2000
Run Code Online (Sandbox Code Playgroud)

And*_*mar 5

编辑:@AaronBertrand的评论是正确的,每年的日期不适用于闰年.你可以用他的解决方案.另一种方式是按月和按顺序排序,例如:

SELECT * FROM users ORDER BY month(birthdate), day(birthdate)
Run Code Online (Sandbox Code Playgroud)


Aar*_*and 4

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

ORDER BY DATEADD(YEAR, 2000-YEAR(birthday), birthday);
Run Code Online (Sandbox Code Playgroud)

这将正确处理闰年婴儿。