如何以“%m-%d”格式对生日列表进行排序,以找到最接近今天的日期?

问题描述 投票:0回答:1

对于我的 Python 应用程序,我以

yyyy-mm-dd
格式将生日存储在数据库中,年份 (
yyyy
) 始终为 2020 年,因此我允许闰年日期为 2 月 29 日,这个系统对我来说运行良好。我只是从数据库中获取月份+日期并忽略年份。但是,现在我想创建一个返回即将到来的生日的函数。

我尝试过像这样的简单 SQL 查询:

SELECT user_id, DATE_FORMAT(birthday, '%m-%d') AS upcoming_birthday 
FROM birthdays 
WHERE DAYOFYEAR(birthday) > DAYOFYEAR(NOW()) AND guild_id = %s 
ORDER BY DAYOFYEAR(birthday);

但这并没有考虑“年份转换”,例如如果今天的日期是 12 月 15 日,下一个生日是 1 月,则不会返回任何内容,因为 DAYOFTHEYEAR 较小。

如何制作始终准确返回下一个生日的 SQL 查询或 Python 函数?

sql datetime mariadb
1个回答
0
投票

如果没有架构和示例数据,很难为您提供准确的解决方案。可能有更优雅的方法,但类似这样的方法应该有效:

SELECT CASE
    WHEN DATE_FORMAT(birthday, CONCAT(YEAR(CURDATE()), '-%m-%d')) < CURDATE() THEN DATE_FORMAT(birthday, CONCAT(YEAR(CURDATE()), '-%m-%d')) + INTERVAL 1 YEAR
    ELSE DATE_FORMAT(birthday, CONCAT(YEAR(CURDATE()), '-%m-%d'))
END AS upcoming_birthday
FROM birthdays
ORDER BY upcoming_birthday

基本上,获取当年的生日,如果在今天之前,则添加一年。

© www.soinside.com 2019 - 2024. All rights reserved.