mysql生日提醒,闰年

mysql生日提醒,闰年,第1张

概述我正在尝试整理一个结果集,该结果集给出了按即将到来的生日排序的5个最近的用户.这种方法非常有效,直到闰年发挥作用.例如:> 5月15日 - 还剩96天> 5月15日 - 还剩97天最重要的结果是1987年出生,较低的是1988年.u_birth存储为yyyy-mm-dd.有没有一种简单的方法来排序这个问题,而不必重写整个查询?SELECT u_b

我正在尝试整理一个结果集,该结果集给出了按即将到来的生日排序的5个最近的用户.这种方法非常有效,直到闰年发挥作用.例如:

> 5月15日 – 还剩96天
> 5月15日 – 还剩97天

最重要的结果是1987年出生,较低的是1988年.
u_birth存储为yyyy-mm-dd.
有没有一种简单的方法来排序这个问题,而不必重写整个查询?

SELECT u_birth,IF( DAYOFYEAR( u_birth ) >= DAYOFYEAR( Now() ),DAYOFYEAR( u_birth ) - DAYOFYEAR( Now() ),DAYOFYEAR( u_birth ) - DAYOFYEAR( Now() ) +        DAYOFYEAR( CONCAT( YEAR( Now() ),'-12-31' ) )  )   AS distanceFROM (blog_users)WHERE `s_agehIDe` = 0ORDER BY distance ASCliMIT 5

此查询是从MysqL手册中获取和修改的:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#c7489最佳答案如果您的算法取决于该人的出生年份,则显然存在问题.要解决此问题,首先在当前日期之后找到每个人的下一个生日,然后计算该日期与现在之间的差异.

SELECT u_birth,DATEDIFF(next_birthday,Now()) AS distance FROM (    SELECT *,ADDDATE(birthday,INTERVAL birthday < DATE(Now()) YEAR) AS next_birthday    FROM (        SELECT *,ADDDATE(u_birth,INTERVAL YEAR(Now()) - YEAR(u_birth) YEAR) AS birthday        FROM blog_users        WHERE s_agehIDe = 0    ) AS T1) AS T2ORDER BY distance ASCliMIT 5

结果:

'1992-02-29',20'1993-03-01',21'1987-05-15',96'1988-05-15',96'1988-09-18',222

测试数据:

CREATE table blog_users (u_birth NVARCHAR(100) NOT NulL,s_agehIDe INT NOT NulL);INSERT INTO blog_users (u_birth,s_agehIDe) VALUES('1987-05-15',0),('1988-05-15',('1988-09-20',('2000-01-02',('2000-01-03',1),('1988-09-19',('1988-09-18',('1992-02-29',('1993-03-01',0);

请注意,假设在闰日出生的人在非闰年有2月28日的生日.

此外,您的查询不包括用户的用户ID.你可能想要添加它,我想.

总结

以上是内存溢出为你收集整理的mysql生日提醒,闰年全部内容,希望文章能够帮你解决mysql生日提醒,闰年所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1166396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存