MySQL查询以根据当前日期排序即将到来的生日 [英] MySQL query to sort upcoming birthdays based on current date

查看:840
本文介绍了MySQL查询以根据当前日期排序即将到来的生日的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下人物和他们的生日:

I have the following table of people and their birthdays:

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,排序结果应该是:

and I have no idea how to sort the names on how closer the birthday is to today. So for NOW() = 2011-09-08 the sorted result should be:

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

我正在寻找一个快速的黑客,不太在乎性能(宠物项目 - 表将持有不到1000条记录),但当然每个建议将非常感谢。

I'm looking for a quick hack, don't really care for performance (pet project - table will hold less than 1000 records), but of course every suggestion will be extremely appreciated.

推荐答案

这是一种方式:


  • 计算当前年份 - 出生年份

  • 将结果的年数添加到出生日期

  • 今年您现在有生日,如果此日期已过,则再增加一年

  • 按日期排序结果

  • Calculate current year - year of birth
  • Add the resulting number of years to the date of birth
  • You now have the birthday this year, if this date has passed then add one more year
  • Sort the results by that date
SELECT
    name,
    birthday,
    birthday + INTERVAL(YEAR(CURRENT_TIMESTAMP) - YEAR(birthday)) + 0 YEAR AS currbirthday,
    birthday + INTERVAL(YEAR(CURRENT_TIMESTAMP) - YEAR(birthday)) + 1 YEAR AS nextbirthday
FROM bd
ORDER BY CASE
    WHEN currbirthday >= CURRENT_TIMESTAMP THEN currbirthday
    ELSE nextbirthday
END

SQLFiddle

这篇关于MySQL查询以根据当前日期排序即将到来的生日的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆