MySql生日闰月处理
1. 科普下润年:
先安装mysql官方示例数据库employees。没安装的可以参考:《MAC安装MYSQL官方示例数据库EMPLOYEE》
- 脚本操作:
-- 创建表employees
create table employees like employees.employees;
-- 将employees库的employees表数据插入到自己的表
insert into employees
select * from employees.employees limit ,;
-- 新增数据,生日为闰年1972-02-29
insert into employees
select '','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+ 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 today
from employees e
) as a - 查询结果
- 代码:

5.3 出生日期是29日,当年或下一年生日是28日,就将生日日期加1天
- 代码:
select name,birthday,today,
date_add(curr, interval if(day(birthday)= && day(curr)=, , ) day) as cur, -- 闰年运行后的当年生日
date_add(next, interval if(day(birthday)= && day(next)=, , ) day) as next -- 闰年运行后的下一年生日
from (
select name,birthday,today,
date_add(birthday, interval diff year) curr, -- 当年生日
date_add(birthday, interval diff+ 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 today
from 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)= && day(curr)=, , ) day) as cur, -- 闰年运行后的当年生日
date_add(next, interval if(day(birthday)= && day(next)=, , ) day) as next -- 闰年运行后的下一年生日
from (
select name,birthday,today,
date_add(birthday, interval diff year) curr, -- 当年生日
date_add(birthday, interval diff+ 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 today
from employees e
) as a
) as b
) as c 查询结果:
- 代码:

MySql生日闰月处理的更多相关文章
- mysql--SQL编程(关于mysql中的日期,实例,判断生日是否为闰年) 学习笔记2.1
关于日期处理的实例: 从mysql给出的 example 这个是官方源码下载以及导入,http://dev.mysql.com/doc/employee/en/employees-installati ...
- [MySQL]-->询5
几天之内解决在新年发行一个同事的生日过程
前言: 遇到朋友提问,例如以下:SELECT * FROM ali_users WHERE DATEDIFF(CAST(CONCAT(DATE_FORMAT(NOW(),'%y'),D ...
- [MySQL]-->查询5天之内过生日的同事中的闰年2月29日问题的解决过程
前言: 上次写了查询5天之内过生日的同事中的跨年问题的解决过程,网址为:http://blog.csdn.net/mchdba/article/details/38952033 ,当中漏了一个闰年2月 ...
- mysql 年龄计算(根据生日字段)
mysql 年龄计算(根据生日字段) year( from_days( datediff( now( ), birthdate))) //获取年龄 now() 当前时间,精确到秒 datediff(b ...
- mysql 计算生日
生日(DATE) 计算方法1: YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5)) 计算方法2: year ...
- MySql查询生日的两种方式
需要是要查询日期段内过生日的会员,分为两种情况: 1. 不跨年 例如: 查询2017-01-01到2017-01-20之间过生日的会员 (假定今天是2017-01-01则这种也可以描述为20天内过生 ...
- MySQL - 统计每个月生日的人数
Person表定义如下: create table person(id int primary key auto_increment, birthday datetime); Person 数据如下: ...
- mysql 年龄计算(根据生日)
生日(DATE) 计算方法1: ))) 计算方法2: year( from_days( datediff( now( ), birthdate))) now() 当前时间,精确到秒 datediff( ...
- mysql从身份证号中提取生日、性别
SELECT p.ID, p.IDCardNo, IF ( LENGTH(p.IDCardNo) , CAST( , ) AS DATETIME ), CAST( CONCAT( ', , ) ) A ...
随机推荐
- HTML、canvas、video灰度
效果图: 注:本例需在服务器上运行的才能看到效果.视频文件可换成本地视频(HBuilder有集成服务器或者使用wampmanager). 代码如下: <!DOCTYPE html> < ...
- hiho一下120周 后缀数组一·重复旋律
后缀数组一·重复旋律 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列. 小Hi ...
- Logistic回归原理及公式推导[转]
原文见 http://blog.csdn.net/acdreamers/article/details/27365941 Logistic回归为概率型非线性回归模型,是研究二分类观察结果与一些影响因素 ...
- intelij idea 2016.2注册码
激活码: 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1l ...
- 每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容
前言: 这里主要是针对列表中的文件下新增子项的操作,同时在新建子项时,可以为子项指定特定的内容类型,在某些时候需要查询指定的文件夹下的内容,针对这些场景都一一给力示例和说明,都是一些很小的知识点,希望 ...
- SQL Server 2012 使用警报调度数据库作业通知操作员
如果想让数据库满足某种条件时,触动警报,然后执行一系列作业,并通知管理员,则需要配置警报 比如,当数据库日志达到一定大小如10M时触动警报,执行以下3个作业步骤:备份日志.收缩日志文件到2M.完备数据 ...
- Python 列表
python 列表 列表的特点 1.列表是一种可变的数据类型,这点是跟元组有区别的 2.列表中的值是有序的,并且可存放重复的值,这点跟set有区别的 3.python中的列表类似于其它语言中的数组 4 ...
- OGNL语言
OGNL 一.概述 以下内容摘自Ognl的官网: OGNL stands for Ob ...
- Android学习笔记(二)
Google在Android4.0之后加入了Action Bar的功能.但是有时候标题栏会相当占用屏幕空间,使得内容区域变小,这里演示如何隐藏标题栏. 隐藏标题栏的方法很简单,打开上节的FirstAc ...
- JavaScript 判断一个对象的数据类型。
1.isString var isString1 = function (obj){ return Object.prototype.toString.call(obj)==="[objec ...