当前位置: 首页 > 面试题库 >

根据当前日期对即将到来的生日进行排序

穆俊杰
2023-03-14
问题内容

我有下表的人和他们的生日:

name        birthday
----------------------
yannis      1979-06-29
natalia     1980-08-19
kostas      1983-10-27    
christos    1979-07-22
kosmas      1978-04-28

而且我不知道如何根据生日离今天有多近来对名字进行排序。因此,对于NOW()= 2011-09-08,排序结果应为:

kostas      1983-10-27
kosmas      1978-04-28
yannis      1979-06-29
christos    1979-07-22
natalia     1980-08-19

我正在寻找一个快速的技巧,并不真正在意性能(宠物项目-表将容纳少于1000条记录),但是当然每个建议都会受到赞赏。


问题答案:

这是一种方法:

  • 计算 当前年份 - 出生年份
  • 将得出的年数加上 出生日期
  • 您现在有今年的生日,如果这个日期过去了,再增加一年
  • 按该日期对结果进行排序

    SELECT
    name,
    birthday,
    birthday + INTERVAL (YEAR(CURRENT_DATE) - YEAR(birthday)) YEAR AS currbirthday,
    birthday + INTERVAL (YEAR(CURRENT_DATE) - YEAR(birthday)) + 1 YEAR AS nextbirthday
    FROM birthdays
    ORDER BY CASE
    WHEN currbirthday >= CURRENT_DATE THEN currbirthday
    ELSE nextbirthday
    END


笔记

  • 不考虑当前时间,今天的生日首先出现
  • 2月29日的生日等同于普通年份的2月28日的生日,例如
    • 在2019年1月1日对2月28日和2月29日的生日(2019)进行相等排序
    • 在2019年3月1日,按预期方式对2月28日和2月29日生日(2020年)进行了排序

SQLFiddle



 类似资料:
  • 问题内容: 我试图根据键中的日期对此HashMap进行排序 我的哈希图: 问题答案: 使用代替。正如已经实现的那样,它将在插入时自动排序。 或者,如果您有一个现有的并且想要基于它创建一个,则将其传递给构造函数: 也可以看看: Java教程-地图实现 Java教程-对象排序

  • 有了这个,我会检查服务最后一次运行的时间,以及是否有必要再次运行。 我正在将当前日期转换为整数。但后来我得到一个错误:错误: 08-27 17:21:40.930:W/System.err(26577):java.lang.NumberFormatException:无效int:“201308271721” 08-27 17:21:40.930:W/System.err(26577):java.l

  • 问题内容: 我正在尝试根据创建日期读取最新的10个文件。 我尝试了此代码,但是它不能用,我的意思是,每当我添加新文件时,它都不会在输出中显示新文件名。 我什至尝试了apache commons io,但这也不起作用(这意味着在该目录中创建新文件时,不显示新文件) 这是我的Apache Commons io版本 问题答案: 尝试翻转比较顺序: 这对我来说仅适用于本地测试。

  • 问题内容: 我正在尝试编写查询以选择其生日在未来7天内的数据库用户。 我已经做了很多研究,但无法提出可行的解决方案。 生日字段存储为varchar,例如‘04 / 16/93’,有什么办法可以使用? 这是我到目前为止的内容: 我应该说得更清楚一些,我想找到生日而不是生日。所以我只是在寻找几天和几个月而不是几年。 问题答案: 要获得接下来7天内的所有生日,请将出生日期和今天之间的年份差值与出生日期相

  • 我有一个应用程序,从一个api接收一些数据,我想比较它们,但不知道如何做。 来自api的日期在不同的模板中,加上它的字符串,所以我无法比较。 如果收到的日期早于当前日期,我想显示一条错误消息。 以下是api日期的来源(我已经在控制台上打印出来): 这是日期时间。现在在颤振: 有没有办法比较它们?