按生日排序,无视年份

时间:2012-06-26 17:53:14

标签: sql sql-server-2008 tsql sql-server-2005

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

以下内容不起作用,因为生日的年代开始发挥作用。下面的例子说明了当年度被认为会发生什么:

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 个答案:

答案 0 :(得分:5)

编辑:@ AaronBertrand的评论是正确的,day-of-year并不适用于闰年。你可以用他的解决方案。另一种方法是按月和按顺序排序,例如:

SELECT * FROM users ORDER BY month(birthdate), day(birthdate)

答案 1 :(得分:4)

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

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

这将正确处理闰年婴儿。

答案 2 :(得分:1)

尝试

SELECT * FROM users ORDER BY SUBSTRING(birthdate, 1, 5);

答案 3 :(得分: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