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 ...
随机推荐
- 常见C内存管理程序
本文主要关注的是C内存管理程序,比较著名的几个C内存管理程序,其中包括: l Doug Lea Malloc:Doug Lea Malloc实际上是完整的一组分配程序,其中包括Doug Lea的原 ...
- Android控件之SlidingDrawer(滑动式抽屉)详解与实例
SlidingDrawer效果想必大家也见到过,它就是1.5模拟器上进入应用程序列表的效果.下面是截图 一.简介 SlidingDrawer隐藏屏外的内容,并允许用户通过handle以显示隐藏内容.它 ...
- BigDecimal在实际项目的应用及遇到的问题
我们都知道,java中对大小数,高精度的计算都会用到BigDecimal.但是在实际应用中,运用BigDecimal还是会遇到一些问题.下面说一下我在项目中怎么样BigDecimal和遇到的一些问题. ...
- Verilog HDL那些事_建模篇笔记(实验一,实验二)
实验一:永远的流水灯 扫描频率配置为100Hz,即是说扫描周期为10ms.这里需要注意的是扫描周期的概念.流水灯嘛,顾名思义,扫描周期指的是流水灯扫一轮所需要的时间.听到说周期,就应该想到在建模的时候 ...
- 【python】进程
multiprocessing 如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择.由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序? 由 ...
- ssl_error_rx_record_too_long
Linux下安装SSL 当使用https访问时出现: SSL 接收到一个超出最大准许长度的记录. (错误码: ssl_error_rx_record_too_long) 网上说修改虚拟机 vi /et ...
- c# winform窗体闪烁解决方法
在主窗体中任意位置加上下面的代码即可 protected override CreateParams CreateParams { get { CreateParams cp = base.Creat ...
- 封装实现一个自己的tabbar
实现效果:
- 每天一个 Linux 命令(12):more命令
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...
- log4j打印mybatis sql语句
Mybatis默认使用有slf4j 必须加上依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId& ...