1. select PERIOD_DIFF(date_format(now(),'%Y%m'),date_format('2010-11-30','%Y%m'))

1. MySQL 为日期增加一个时间间隔:date_add()

  1. set @dt = now();
  2. select date_add(@dt, interval 1 day); -- add 1 day
  3. select date_add(@dt, interval 1 hour); -- add 1 hour
  4. select date_add(@dt, interval 1 minute); -- ...
  5. select date_add(@dt, interval 1 second);
  6. select date_add(@dt, interval 1 microsecond);
  7. select date_add(@dt, interval 1 week);
  8. select date_add(@dt, interval 1 month);
  9. select date_add(@dt, interval 1 quarter);
  10. select date_add(@dt, interval 1 year);
  11. select date_add(@dt, interval -1 day); -- sub 1 day

MySQL adddate(), addtime()函数,可以用 date_add() 来替代。下面是 date_add() 实现 addtime() 功能示例:

  1. mysql> set @dt = '2008-08-09 12:12:33';
  2. mysql>
  3. mysql> select date_add(@dt, interval '01:15:30' hour_second);
  4. +------------------------------------------------+
  5. | date_add(@dt, interval '01:15:30' hour_second) |
  6. +------------------------------------------------+
  7. | 2008-08-09 13:28:03 |
  8. +------------------------------------------------+
  9. mysql> select date_add(@dt, interval '1 01:15:30' day_second);
  10. +-------------------------------------------------+
  11. | date_add(@dt, interval '1 01:15:30' day_second) |
  12. +-------------------------------------------------+
  13. | 2008-08-10 13:28:03 |
  14. +-------------------------------------------------+

date_add() 函数,分别为 @dt 增加了“1小时 15分 30秒” 和 “1天 1小时 15分 30秒”。建议:总是使用 date_add() 日期时间函数来替代 adddate(), addtime()。 

  2. MySQL 为日期减去一个时间间隔:date_sub()

  1. mysql> select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
  2. +----------------------------------------------------------------+
  3. | date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second) |
  4. +----------------------------------------------------------------+
  5. | 1997-12-30 22:58:59 |
  6. +----------------------------------------------------------------+

MySQL date_sub() 日期时间函数 和 date_add() 用法一致,不再赘述。另外,MySQL 中还有两个函数 subdate(), subtime(),建议,用 date_sub() 来替代。 

  3. MySQL 另类日期函数:period_add(P,N), period_diff(P1,P2) 
  函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”,第二个参数“N” 表示增加或减去 N month(月)。 
MySQL period_add(P,N):日期加/减去N月。

  1. mysql> select period_add(200808,2), period_add(20080808,-2)
  2. +----------------------+-------------------------+
  3. | period_add(200808,2) | period_add(20080808,-2) |
  4. +----------------------+-------------------------+
  5. | 200810 | 20080806 |
  6. +----------------------+-------------------------+

MySQL period_diff(P1,P2):日期 P1-P2,返回 N 个月。

  1. mysql> select period_diff(200808, 200801);
  2. +-----------------------------+
  3. | period_diff(200808, 200801) |
  4. +-----------------------------+
  5. | 7 |
  6. +-----------------------------+

在 MySQL 中,这两个日期函数,一般情况下很少用到。 

4. MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2) 
MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。

  1. select datediff('2008-08-08', '2008-08-01'); -- 7
  2. select datediff('2008-08-01', '2008-08-08'); -- -7

MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值。

  1. select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08
  2. select timediff('08:08:08', '00:00:00'); -- 08:08:08

注意:timediff(time1,time2) 函数的两个参数类型必须相同。 

MySQL查询的方式很多,下面为您介绍的MySQL查询实现的是查询本周、上周、本月、上个月份的数据,如果您对MySQL查询方面感兴趣的话,不妨一看。 

查询当前这周的数据

  1. SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());

查询上周的数据

  1. SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now())-1;

查询当前月份的数据

  1. select name,submittime from enterprise   where date_format(submittime,'%Y-%m')=date_format(now(),'%Y-%m')

查询距离当前现在6个月的数据

  1. select name,submittime from enterprise where submittime between date_sub(now(),interval 6 month) and now();

查询上个月的数据

  1. select name,submittime from enterprise   where date_format(submittime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m')
    1. select * from `user` where DATE_FORMAT(pudate,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') ;
    2. select * from user where WEEKOFYEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = WEEKOFYEAR(now())
    3. select *
    4. from user
    5. where MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now())
    6. select *
    7. from [user]
    8. where YEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = YEAR(now())
    9. and MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now())
    10. select *
    11. from [user]
    12. where pudate between 上月最后一天
    13. and 下月第一天

MySQL时间差返回月个数的更多相关文章

  1. OpenLayers添加点【php请求MySQL数据库返回GeoJSON数据】

    php请求MySQL数据库返回GeoJSON数据的实现方法请参见: http://www.cnblogs.com/marost/p/6234514.html OpenLayers[v3.19.1-di ...

  2. MySQL 存储过程返回多个值

    MySQL  存储过程返回多个值   在本教程中,您将学习如何编写/开发返回多个值的存储过程. MySQL存储函数只返回一个值.要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程 ...

  3. js如何返回两个数的商的整数和余数部分?

    js中,如何返回两个数的商的整数和余数部分? 如: num1:100 ,num2:12 var num = parseFloat(100/12); //值: 8.333333333333334 那么如 ...

  4. ZT 输入一个字符串,查找它的第一个数字串,并返回其个数

    /*查找字符串中的数字串问题 输入一个字符串,查找它的第一个数字串,并返回其个数 */ #include <stdio.h> char firstnum(char *input,char ...

  5. mysql更新返回值问题(更新内容跟之前内容一样,返回0)

    mysql更新返回值问题 问: 有一界面要更新个人信息,有几十个text标签需要填写假设有一用户从用户列表点修改进入了修改页面,但又没有修改什么,马上点击保存这时,因为text标签非常多,不能够一一判 ...

  6. Python查询Mysql时返回字典结构的代码

    Python查询Mysql时返回字典结构的代码 MySQLdb默认查询结果都是返回tuple,输出时候不是很方便,必须按照0,1这样读取,无意中在网上找到简单的修改方法,就是传递一个cursors.D ...

  7. Spring Boot项目中MyBatis连接DB2和MySQL数据库返回结果中一些字符消失——debug笔记

    写这篇记录的原因是因为我之前在Spring Boot项目中通过MyBatis连接DB2返回的结果中存在一些字段, 这些字段的元素中缺少了一些符号,所以我现在通过在自己的电脑上通过MyBatis连接DB ...

  8. Mysql 时间差(年、月、天、时、分、秒)

    SELECT TIME_TO_SEC(TIMEDIFF('2018-09-30 19:38:45', '2018-08-23 10:13:01')) AS DIFF_SECOND1, -- 秒 UNI ...

  9. jdbc 处理mysql procedure返回的多个结果集

    1:测试数据库表user mysql> desc user$$ +-------+-------------+------+-----+---------+----------------+ | ...

随机推荐

  1. Java中使用LocalDate根据日期来计算年龄

    Java中和日期直接相关的类有很多,平时最常用到的就是java.util package下面的Date和Calendar,需要用到格式的时候还会用到java.text.SimpleDateFormat ...

  2. MySQL 数据类型和约束(外键是重点🙄)

    数据类型 1. 数字(默认都是由符号,宽度表示的是显示宽度,与存储无关).tinyint 括号里指定宽度 七位2进制数最大数就是2**7 -1=127 最小是-128 验证: create tabel ...

  3. Sublime Text3注册码,亲测可用

    将以下复制在输入框即可 ,亲测可用 . 不过还是希望大家多多支持正版 . -– BEGIN LICENSE -– TwitterInc 200 User License EA7E-890007 1D7 ...

  4. 进程管理工具Supervisor(二)Events

    supervisor可以当做一个简单的进程启动.重启.控制工具使用,也可以作为一个进程监控框架使用,作为后者,需要使用supervisor的Events机制. Event Listeners supe ...

  5. Spark源码剖析(九):TaskScheduler原理与源码剖析

    接着上期内核源码(六)的最后,DAGSchedule会将每个Job划分一系列stage,然后为每个stage创建一批task(数量与partition数量相同),并计算其运行的最佳位置,最后针对这一批 ...

  6. Windows下phpStudy配置独立站点详细步骤

    本文讲如何在phpStudy下配置 域名->站点 步骤. 开始之前,我们先添加几个本地域名(host文件),如果有域名映射到主机此步可以跳过,直接看后面的phpStudy配置部分. 首先打开ho ...

  7. Unity3d 复制文字到剪切板及存储图像到相册

    游戏中里开发分享功能时用到两个小功能:1.复制一个链接到剪切板供在其他应用粘贴分享使用,2.保存一张二维码图像到相册供发送给其他应用用于分享.但是在unity中无法完成,需要分别开发相应的插件. An ...

  8. Percona XtraBackup 核心文档

    1. 介绍 1.1 MySQL 备份工具特性对比 Features Percona XtraBackup MySQL Enterprise backup License GPL Proprietary ...

  9. Lottie的使用

    一.简介 Lottie是Airbnb开源的一个面向IOS.Android.React Native的动画库,能分析Adobe After Effects导出的动画,并且能让原生App像使用静态素材一样 ...

  10. 一次Oracle宕机切换后产生ORA错误的处理过程

    问题背景 机房意外断电后Oracle主服务器启动失败,Oracle备机接管 为了安全,管理员对于数据库做expdp的逻辑备份.但备份时发现AttributeInstance表备份失败,提示ORA-01 ...