1. 科普下润年:

①、非整百年能被4整除的为闰年。(如2004年就是闰年,2100年不是闰年)
②、整百年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
2. 例:
例如:当前日期是2016年8月21日,有人出生在1972年2月29日,查询后该用户最近的生日应该是2017年3月1日(非闰年)。如果当前日期是2016年1月20日,那么查询后应该返回2016年2月29日(闰年)。
3. 初始数据

先安装mysql官方示例数据库employees。没安装的可以参考:《MAC安装MYSQL官方示例数据库EMPLOYEE》

  • 脚本操作:
-- 创建表employees
create table employees like employees.employees;
-- 将employees库的employees表数据插入到自己的表
insert into employeesselect * from employees.employees limit 0,10;
-- 新增数据,生日为闰年1972-02-29
insert into employeesselect '10011','1972-02-29','Jiang','David','M','1990-2-20';

4. 查询用户和出生信息

  • 语句:
-- 查询用户和出生信息
select concat(e.last_name, '  ', e.first_name) as Name, e.birth_date as BirthDate from employees e;

  • 查询结果:

5. 实现

  5.1 查询当前日期、当前日期和生日间隔的年数。

  • 代码:
  • select concat(e.last_name, '  ', e.first_name) as Name, e.birth_date  as BirthDay,(year(now())-year(e.birth_date)) diff,now() as today
    from employees e

  • 结果:

      

        

  5.2 查询当年的生日和下一年的生日。

  • 代码:

    select name,birthday,today,date_add(birthday, interval diff year) curr, -- 当年生日date_add(birthday, interval diff+1 year) next    -- 下一年生日
    from (select concat(e.last_name, '  ', e.first_name) as Name, e.birth_date  as BirthDay,(year(now())-year(e.birth_date)) diff,now() as todayfrom employees e
    ) as a

  • 查询结果

      

   5.3 出生日期是29日,当年或下一年生日是28日,就将生日日期加1天

  • 代码:

    select name,birthday,today,date_add(curr, interval if(day(birthday)=29 && day(curr)=28, 1, 0) day) as cur, -- 闰年运行后的当年生日date_add(next, interval if(day(birthday)=29 && day(next)=28, 1, 0) day) as next -- 闰年运行后的下一年生日
    from (select name,birthday,today,date_add(birthday, interval diff year) curr,  -- 当年生日date_add(birthday, interval diff+1 year) next -- 下一年生日from (select concat(e.last_name, '  ', e.first_name) as Name, e.birth_date  as BirthDay,(year(now())-year(e.birth_date)) diff,now() as todayfrom employees e) as a
    ) as b

  • 查询结果:

      

  5.4 最终代码,如果当年生日已经过了就返回下一年生日。

  • 代码:

    select name,birthday,if(cur>today, cur, next) as birth_day -- 如果当年生日大于当前日期,生日为今年,否则为下一年
    from(select name,birthday,today,date_add(curr, interval if(day(birthday)=29 && day(curr)=28, 1, 0) day) as cur, -- 闰年运行后的当年生日date_add(next, interval if(day(birthday)=29 && day(next)=28, 1, 0) day) as next -- 闰年运行后的下一年生日from (select name,birthday,today,date_add(birthday, interval diff year) curr,  -- 当年生日date_add(birthday, interval diff+1 year) next -- 下一年生日from (select concat(e.last_name, '  ', e.first_name) as Name, e.birth_date  as BirthDay,(year(now())-year(e.birth_date)) diff,now() as todayfrom employees e) as a) as b
    ) as c

  • 查询结果:

      

  

转载于:https://www.cnblogs.com/frank-quan/p/5793246.html

MySql生日闰月处理相关推荐

  1. php mysql生日提醒_基于AIML的PHP聊天机器人

    php中文网最新课程 每日17点准时技术干货分享 chatbot:基于AIML的PHP聊天天机器人 本文章中讲介绍用PHP实现的一个小聊天机器人程序,用到了php操作dom相关的知识和mysql数据库 ...

  2. linux c 获取mac地址吗,Linux系统下用C语言获取MAC地址

    最近在做一个小程序,需要用到在linux系统里编写C程序从而获取MAC地址,从网上搜了一遍,想总结一下.如果你就只需要单个功能的程序,可以采用方法一,见代码1,一般最好能够封装起来,写成获取MAC地址 ...

  3. MYSQL经典SQL之生日问题

    根据用户的出生日期和当前日期,查询他的下一次生日 我们使用employees.employees表进行演示 如果你的mysql数据中没有此表,可参考http://blog.csdn.net/sun_x ...

  4. mysql date week_mysql weekday(date)/subdate(date,间隔天数)查询年龄/本月/周过生日

    表信息 准备知识 select now(); #当前日期时间 select curdate (); #当前日期 select curtime(); #当前时间 weekday(date) #返回日期的 ...

  5. [MySQL]--gt;查询5天之内过生日的同事中的闰年2月29日问题的解决过程

    前言: 上次写了查询5天之内过生日的同事中的跨年问题的解决过程,网址为:http://blog.csdn.net/mchdba/article/details/38952033 ,当中漏了一个闰年2月 ...

  6. MySQL查询7天内过生日的用户 查询生日是今天的用户 解决跨年问题

    MySQL查询生日是今天的用户 select * from customer where MONTH(birthday) = MONTH(NOW()) and DAY(birthday) = DAY( ...

  7. mysql实现生日倒计时

    首先获取今年和来年的生日日期,今年生日过了则计算下一年生日距离今天多少天:mysql默认没有29号时取28号. EG:客户表customer_info 查询生日倒计时N天内生日提醒 SELECT * ...

  8. MySQL和SQLite根据生日算年龄

    MySQL和SQLite根据生日算年龄 MySQL: 1.select (date_format(from_days((to_days(now()) - to_days(birthday))),'%Y ...

  9. mysql身份证校验码_mysql正则表达式验证身份证,并获取年龄、生日、性别

    mysql正则表达式验证身份证,并获取年龄.生日.性别 发布时间:2018-05-17 16:28, 浏览次数:4844 , 标签: mysql正则表达式,mysql验证身份证,REGEXP mysq ...

  10. mysql与oracle根据生日时间计算生日

    mysql写法 SELECT user_id, birthday, CURDATE() nowaday,(YEAR(CURDATE())-YEAR(STR_TO_DATE(birthday,'%Y-% ...

最新文章

  1. PHP CURL方法,GETPOST请求。
  2. Daydream a Little+偶尔做一下白日梦
  3. c语言常量类型转换,c语言基础教程常量变量和类型转换,免费版.doc
  4. 搜索引擎是如何判断网站质量的?
  5. Introduction to Algorithm 6.3-3[Second Version]
  6. SAP Marketing cloud里的campaign管理
  7. 牛客挑战赛47 C 条件(Floyd bitset优化)
  8. 从此明白了卷积神经网络(CNN)
  9. java中 以下接口以键_java复习题
  10. Unable to instantiate default tuplizer
  11. 行级共享锁和行级排他锁_Power BI中的行级安全性简介
  12. ajax中xmlhttp.readyState==4 xmlhttp.status==200 是什么意思
  13. Postgresql去掉某个字段多余的空格
  14. html网页简单实现图片轮播效果,CSS3简单实现图片切换轮播
  15. 高德地图打开卫星地图(高德地图设置方法)
  16. c++:过滤多余的空格
  17. 【编程题】【Scratch一级】2019.12 飞向太空
  18. windows照片查看器解决方案
  19. 深度学习相关课程,MIT、李沐、吴恩达、
  20. cookies是什么

热门文章

  1. 3ds Max Taper、Twist和Bend的运用——衣架的制作
  2. 海湾gst5000主机消防广播_海湾GST5000消防主机调试步骤
  3. 文献管理软件工具讲解-------阿冬专栏!!!
  4. win10计算机升级系统,win10系统升级更新方法
  5. 港股通换汇、红利、交易费用、资金清算规则
  6. unity 卡通动物 shader 包含边缘光,ramp,描边
  7. windows操作系统未关闭默认共享
  8. ​模拟人生3 Mac版自由性超高的模拟游戏
  9. 图像处理之LOMO特效
  10. 入门级服务器的选购——DIY篇