mysql--SQL编程(关于mysql中的日期,实例,判断生日是否为闰年) 学习笔记2.1
关于日期处理的实例:
从mysql给出的 example 这个是官方源码下载以及导入,http://dev.mysql.com/doc/employee/en/employees-installation.html
然后执行下面的操作:
mysql> create table employees like employees.employees;
Query OK, 0 rows affected (0.11 sec) mysql> desc employees;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no | int(11) | NO | PRI | NULL | |
| birth_date | date | NO | | NULL | |
| first_name | varchar(14) | NO | | NULL | |
| last_name | varchar(16) | NO | | NULL | |
| gender | enum('M','F') | NO | | NULL | |
| hire_date | date | NO | | NULL | |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
从其他数据库中指定的表中导入数据,employees.employees 导入前10条数据
mysql> insert into employees select * from employees.employees limit 10;
Query OK, 10 rows affected (0.04 sec)
Records: 10 Duplicates: 0 Warnings: 0
仅查询employess表中的last_name,first_name和birthd_date三个数据
mysql> select concat(last_name,' ',first_name) as name,birth_date as birthday from employees;
mysql> select concat(last_name,' ',first_name) as name,birth_date as birthday from employees;
+--------------------+------------+
| name | birthday |
+--------------------+------------+
| Facello Georgi | 1953-09-02 |
| Simmel Bezalel | 1964-06-02 |
| Bamford Parto | 1959-12-03 |
| Koblick Chirstian | 1954-05-01 |
| Maliniak Kyoichi | 1955-01-21 |
| Preusig Anneke | 1953-04-20 |
| Zielinski Tzvetan | 1957-05-23 |
| Kalloufi Saniya | 1958-02-19 |
| Peac Sumant | 1952-04-19 |
| Piveteau Duangkaew | 1963-06-01 |
| amos li | 1972-02-29 |
+--------------------+------------+
11 rows in set (0.00 sec)
然后执行下面的命令:用来计算每位员工的出生日期与当前日期相差的年份,以及当前的日期.
select concat(last_name,first_name) as name,birth_date as birthday,(YEAR(now())-YEAR(birth_date)) as diff, now() as today from employees;
+-------------------+------------+------+---------------------+
| name | birthday | diff | today |
+-------------------+------------+------+---------------------+
| FacelloGeorgi | 1953-09-02 | 60 | 2013-12-08 02:12:54 |
| SimmelBezalel | 1964-06-02 | 49 | 2013-12-08 02:12:54 |
| BamfordParto | 1959-12-03 | 54 | 2013-12-08 02:12:54 |
| KoblickChirstian | 1954-05-01 | 59 | 2013-12-08 02:12:54 |
| MaliniakKyoichi | 1955-01-21 | 58 | 2013-12-08 02:12:54 |
| PreusigAnneke | 1953-04-20 | 60 | 2013-12-08 02:12:54 |
| ZielinskiTzvetan | 1957-05-23 | 56 | 2013-12-08 02:12:54 |
| KalloufiSaniya | 1958-02-19 | 55 | 2013-12-08 02:12:54 |
| PeacSumant | 1952-04-19 | 61 | 2013-12-08 02:12:54 |
| PiveteauDuangkaew | 1963-06-01 | 50 | 2013-12-08 02:12:54 |
| amosli | 1972-02-29 | 41 | 2013-12-08 02:12:54 |
+-------------------+------------+------+---------------------+
11 rows in set (0.00 sec)
接下来是为了计算今年和明年的生日,注意如果生日为2月29日,且目标日期不是闰月,那么这两列所包含的将是2月28日,而非3月1日.
select name,birthday,today,date_add(birthday,interval diff year) as cur,date_add(birthday,interval diff+1 year ) as next from (select concat(last_name,first_name) as name,birth_date as birthday,(YEAR(now())-YEAR(birth_date)) as diff, now() as today from employees) as a;
+-------------------+------------+---------------------+------------+------------+
| name | birthday | today | cur | next |
+-------------------+------------+---------------------+------------+------------+
| FacelloGeorgi | 1953-09-02 | 2013-12-08 02:14:27 | 2013-09-02 | 2014-09-02 |
| SimmelBezalel | 1964-06-02 | 2013-12-08 02:14:27 | 2013-06-02 | 2014-06-02 |
| BamfordParto | 1959-12-03 | 2013-12-08 02:14:27 | 2013-12-03 | 2014-12-03 |
| KoblickChirstian | 1954-05-01 | 2013-12-08 02:14:27 | 2013-05-01 | 2014-05-01 |
| MaliniakKyoichi | 1955-01-21 | 2013-12-08 02:14:27 | 2013-01-21 | 2014-01-21 |
| PreusigAnneke | 1953-04-20 | 2013-12-08 02:14:27 | 2013-04-20 | 2014-04-20 |
| ZielinskiTzvetan | 1957-05-23 | 2013-12-08 02:14:27 | 2013-05-23 | 2014-05-23 |
| KalloufiSaniya | 1958-02-19 | 2013-12-08 02:14:27 | 2013-02-19 | 2014-02-19 |
| PeacSumant | 1952-04-19 | 2013-12-08 02:14:27 | 2013-04-19 | 2014-04-19 |
| PiveteauDuangkaew | 1963-06-01 | 2013-12-08 02:14:27 | 2013-06-01 | 2014-06-01 |
| amosli | 1972-02-29 | 2013-12-08 02:14:27 | 2013-02-28 | 2014-02-28 |
+-------------------+------------+---------------------+------------+------------+
11 rows in set (0.00 sec)
如果出生的日期是闰月,并且当前的年份不是闰年,那么日期加一,表示3月1日为生日,对于下一个年份使用同样的操作:
select name,birthday,date_add(next,interval if(day(birthday)=29&&day(next)=28,1,0) day) as next,today,date_add(cur,interval if(day(birthday)=29&&day(cur)=28,1,0) day) as cur from(select name,birthday,today,date_add(birthday,interval diff year) as cur,date_add(birthday,interval diff+1 year ) as next from (select concat(last_name,first_name) as name,birth_date as birthday,(YEAR(now())-YEAR(birth_date)) as diff, now() as today from employees) as a) as b;
+-------------------+------------+------------+---------------------+------------+
| name | birthday | next | today | cur |
+-------------------+------------+------------+---------------------+------------+
| FacelloGeorgi | 1953-09-02 | 2014-09-02 | 2013-12-08 02:19:07 | 2013-09-02 |
| SimmelBezalel | 1964-06-02 | 2014-06-02 | 2013-12-08 02:19:07 | 2013-06-02 |
| BamfordParto | 1959-12-03 | 2014-12-03 | 2013-12-08 02:19:07 | 2013-12-03 |
| KoblickChirstian | 1954-05-01 | 2014-05-01 | 2013-12-08 02:19:07 | 2013-05-01 |
| MaliniakKyoichi | 1955-01-21 | 2014-01-21 | 2013-12-08 02:19:07 | 2013-01-21 |
| PreusigAnneke | 1953-04-20 | 2014-04-20 | 2013-12-08 02:19:07 | 2013-04-20 |
| ZielinskiTzvetan | 1957-05-23 | 2014-05-23 | 2013-12-08 02:19:07 | 2013-05-23 |
| KalloufiSaniya | 1958-02-19 | 2014-02-19 | 2013-12-08 02:19:07 | 2013-02-19 |
| PeacSumant | 1952-04-19 | 2014-04-19 | 2013-12-08 02:19:07 | 2013-04-19 |
| PiveteauDuangkaew | 1963-06-01 | 2014-06-01 | 2013-12-08 02:19:07 | 2013-06-01 |
| amosli | 1972-02-29 | 2014-03-01 | 2013-12-08 02:19:07 | 2013-03-01 |
+-------------------+------------+------------+---------------------+------------+
11 rows in set (0.00 sec)
最后判断今年的生日是否已经过了,如果是,那么返回下一年的生日,最后得到的查询结果如下所示:
select name,birthday,if(cur>today,cur,next) as birth_day from(select name,birthday,date_add(next,interval if(day(birthday)=29&&day(next)=28,1,0) day) as next,today,date_add(cur,interval if(day(birthday)=29&&day(cur)=28,1,0) day) as cur from(select name,birthday,today,date_add(birthday,interval diff year) as cur,date_add(birthday,interval diff+1 year ) as next from (select concat(last_name,first_name) as name,birth_date as birthday,(YEAR(now())-YEAR(birth_date)) as diff, now() as today from employees) as a) as b) as c;
+-------------------+------------+------------+
| name | birthday | birth_day |
+-------------------+------------+------------+
| FacelloGeorgi | 1953-09-02 | 2014-09-02 |
| SimmelBezalel | 1964-06-02 | 2014-06-02 |
| BamfordParto | 1959-12-03 | 2014-12-03 |
| KoblickChirstian | 1954-05-01 | 2014-05-01 |
| MaliniakKyoichi | 1955-01-21 | 2014-01-21 |
| PreusigAnneke | 1953-04-20 | 2014-04-20 |
| ZielinskiTzvetan | 1957-05-23 | 2014-05-23 |
| KalloufiSaniya | 1958-02-19 | 2014-02-19 |
| PeacSumant | 1952-04-19 | 2014-04-19 |
| PiveteauDuangkaew | 1963-06-01 | 2014-06-01 |
| amosli | 1972-02-29 | 2014-03-01 |
+-------------------+------------+------------+
11 rows in set (0.00 sec)
mysql--SQL编程(关于mysql中的日期,实例,判断生日是否为闰年) 学习笔记2.1的更多相关文章
- 《果壳中的C# C# 5.0 权威指南》 - 学习笔记
<果壳中的C# C# 5.0 权威指南> ========== ========== ==========[作者] (美) Joseph Albahari (美) Ben Albahari ...
- vue中添加Echarts图表的使用,Echarts的学习笔记
项目中需要使用一些折线图.柱状图.饼状图等等,之前使用过heightCharts(关于heightCharts请看我的另一篇 http://www.cnblogs.com/jasonwang2y60/ ...
- js面向对象编程:if中可以使用那些作为判断条件呢?
作者来源http://www.2cto.com/kf/201407/314978.html搬运 在所有编程语言中if是最长用的判断之一,但在js中到底哪些东西可以在if中式作为判断表达式呢? 例如如何 ...
- 《C++编程规范:101条规则、准则与最佳实践》学习笔记
转载:http://dsqiu.iteye.com/blog/1688217 组织和策略问题 0. 不要为小事斤斤计较.(或者说是:知道什么东西不需要标准化) 无需在多个项目或者整个公司范围内强制实施 ...
- vue.js中的各种问题记录(包括环境问题和学习笔记)
一.this relative module was not found: 问题的意思是这个模块找不到了 解决方法: 1)查看你入口文件的路径是否写错: 2)查看360杀毒是否拦截了你的文件. 二.v ...
- SOC中的DFT和BIST对比与比较-IC学习笔记(二)
ATE:ATE是Automatic Test Equipment的缩写,根据客户的测试要求.图纸及参考方案,采用MCU.PLC.PC基于VB.VC开发平台,利用TestStand&LabVIE ...
- Android日期时间选择器DatePicker、TimePicker日期时间改变事件响应(Android学习笔记)
activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- python编程:从入门到实践--项目1-外星人入侵_学习笔记_源码
这里有九个.py文件,在工作的间隙,和老板斗智斗勇,终于完成了,实现了游戏的功能,恰逢博客园开通,虽然是对着书上的代码敲了一遍,但是对pygam这个库的了解增加了一些,作为一个python初学者,也作 ...
- Java中关于 ArrayList 和 Map 的常用遍历方法 (学习笔记,便于以后查询)
一.学习ArrayList与Map时,关于常用遍历方法的记录如下: 二.附源码如下: package com.study.in.myself; import java.util.ArrayList; ...
随机推荐
- 利用blob对象实现粘贴图片
blob的一个常用应用场景,就是获取剪切板上的数据来进行粘贴的操作.例如通过QQ截图后,需要在网页上进行粘贴操作. 粘贴图片我们需要解决下面几个问题 1.监听用户的粘贴操作 2.获取到剪切板上的数据 ...
- 【Kafka】Kafka-分区数-备份数-如何设置-怎么确定-怎么修改
Kafka-分区数-备份数-如何设置-怎么确定-怎么修改 kafka partition 数量 更新_百度搜索 kafka重新分配partition - - CSDN博客 如何为Kafka集群选择合适 ...
- struts2 18拦截器详解(九)
ScopedModelDrivenInterceptor 该拦截器处于defaultStack第八的位置,其主要功能是从指定的作用域内检索相应的model设置到Action中,该类中有三个相关的属性: ...
- 转: wireshark过滤语法总结
from: http://blog.csdn.net/cumirror/article/details/7054496 wireshark过滤语法总结 原创 2011年12月09日 22:38:50 ...
- (纪录片)鸟瞰中国 China from Above
简介: 类型: 纪录片官方网站: natgeotv.com/uk/china-from-above制片国家/地区: 美国语言: 英语集数: 2单集片长: 44分钟IMDb链接: tt4872012 主 ...
- Vim的行号、语法显示等设置(.vimrc文件的配置)以及乱码解决
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进 等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc.在启动vim时,当前用户 ...
- android studio开发的时候出现design editor is unavailable until after a successful project sync问题的解决方法
android studio设计界面的时候,出现了报错:design editor is unavailable until after a successful project sync,导致无法编 ...
- Android Developers:按钮
按钮是有文本或者图标(或者文本和图标)组成,它传达用户触摸它的时候所发生的动作. 你可以在你的布局中使用三种方式创建按钮,取决于你是否想创建文本按钮,突变按钮或者两者都有: 设置文本,使用Button ...
- 微信小程序 - 自定义switch切换(示例)
点击下载:switch示例 ,适用于表单,官方switch 说明 .
- vmware备份
http://wenku.baidu.com/view/fc317dcc050876323112128d.html vmware vcb文档 http://www.docin.com/p-423555 ...