gpt4 book ai didi

mysql - 按生日前的天数对用户排序

转载 作者:行者123 更新时间:2023-11-29 06:03:59 24 4
gpt4 key购买 nike

我有一张表格,里面有人和他们的出生日期。我想选择按“距离下一个生日的天数”排序的它们。

我已经尝试使用 DAYOFYEAR() 函数:

SELECT id, DAYOFYEAR(datebirth)-DAYOFYEAR(NOW()) AS daystobd
FROM users ORDER BY daystobd;

但是...如果今年生日已经过去,我得到负 daystobd。目的是将那些列在末尾。

有什么想法吗?

编辑:daystobd 应该反射(reflect)到下一个生日

的实际天数

新编辑:

我设法用 UNION 做到了,但我认为肯定有更“优雅”的方式来做到这一点。

SELECT id, DAYOFYEAR(datebirth)-DAYOFYEAR(CURDATE()) AS daystobd
FROM users WHERE DAYOFYEAR(datebirth)-DAYOFYEAR(CURDATE())>=0
UNION
SELECT id, 365+DAYOFYEAR(datebirth)-DAYOFYEAR(CURDATE()) AS daystobd
FROM users WHERE DAYOFYEAR(datebirth)-DAYOFYEAR(CURDATE())<0 ORDER BY daystobd

最佳答案

比较今天的 MMDD 和用户的生日。然后根据当前或明年构建下一个生日。

SELECT
id,
next_birthday,
DATEDIFF(next_birthday, NOW()) AS daystobd
FROM
(
SELECT
id,
datebirth,
CASE WHEN DATE_FORMAT(datebirth, '%m%d') >= DATE_FORMAT(NOW(), '%m%d')
THEN CONCAT(EXTRACT(YEAR FROM NOW()), '-', DATE_FORMAT(datebirth, '%m-%d'))
ELSE CONCAT(EXTRACT(YEAR FROM NOW()) + 1, '-', DATE_FORMAT(datebirth, '%m-%d'))
END AS next_birthday
FROM users
) data
ORDER BY DATEDIFF(next_birthday, NOW());

关于mysql - 按生日前的天数对用户排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42980864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com