加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

mysql生日提示,闰年

发布时间:2021-03-07 09:38:13 所属栏目:编程 来源:网络整理
导读:我正在实行清算一个功效集,该功效集给出了按即将到来的生日排序的5个最近的用户.这种要领很是有用,直到闰年施展浸染.譬喻: 5月15日 还剩96天 5月15日 还剩97天 最重要的功效是1987年出生,较低的是1988年. u_birth存储为yyyy-mm-dd. 有没有一种简朴的要领来

我正在实行清算一个功效集,该功效集给出了按即将到来的生日排序的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 distance
FROM (blog_users)
WHERE `s_agehide` = 0
ORDER BY distance ASC
LIMIT 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 T2
ORDER BY distance ASC
LIMIT 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.你也许想要添加它,我想.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读