Mysql指定日期区间的提取方法

 更新时间:2018年07月27日 14:28:28   作者:叶舟  
这篇文章主要介绍了Mysql指定日期区间的提取方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

在数据库搬砖的过程中,免不了要跟日期打交道,比如按日期汇总一些指标、统计某段时间内的总量等。

如果是固定的日期还好,只需直接指定即可,但很多时候都是需要根据当前日期自适应变化的。比如:提取上周一到上周日的数据、提取上个月的数据、提取前N个月的数据。。。

这些要求都有一个共同点,就是要视当前日期而定!那么,我们就需要首先获取当前日期的一些信息,如当前日期是本周第几天、本月第几天等,然后,才能做下一步处理。

一、在提取所需日期区间之前,我们先介绍几个常用的函数

-- 先运行这一句
SET @t = '2018-07-26 11:41:29';
-- 再运行这一句
SELECT DATE(@t)当前日期,YEAR(@t) 年份, MONTH(@t)月份,WEEK(@t)本年第几周, DAY(@t) 本月第几天, 
HOUR(@t)小时, MINUTE(@t)分钟, SECOND(@t)秒

运行出来,结果是这样的:

二、下面介绍几个常用的日期加减运算函数

1、ADDDATE(expr, days) / SUBDATE(expr, days):

ADDDAT函数有两个形参,第一个是基准日期,也即需要运算的日期;第二个是一个间隔表达式,形如:INTERVAL 1 HOUR,其中INTERVAL 是间隔的意思,中间的数字1可以换成任意整数,第三个hour可以替换成day/month/year等时间单位。

SUBDATE同理,只不过变成了减法运算。

完整的用法如下:

SELECT ADDDATE('2018-07-26 11:41:29',INTERVAL 1 HOUR);
SELECT SUBDATE('2018-07-26 11:41:29',INTERVAL 1 HOUR);

2、DATE_ADD() / DATE_SUB():

用法同ADDDATE(expr, days) / SUBDATE(expr, days)。

三、日期区间截取

接下来,利用上面介绍的日期函数的用法,就可以进行日期区间的截取了。

1、上周

-- 提取上周的日期区间
SELECT CURDATE() NOW,
ADDDATE(ADDDATE(DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) + 1 DAY),-6),0) startdate,
ADDDATE(DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) + 1 DAY),0) duetodate

2、上月

-- 上月
SELECT CURDATE() NOW, 
DATE_ADD(DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE())+1 DAY), INTERVAL -1 MONTH) startdate,
DATE_ADD(DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE()) DAY), INTERVAL 0 MONTH) duetodate

3、前四个月

-- 前四个月
SELECT CURDATE() NOW, 
ADDDATE(ADDDATE(CURDATE(),INTERVAL -DAY(CURDATE())+1 DAY), INTERVAL -4 MONTH) startdate,
DATE_ADD(DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE()) DAY), INTERVAL 0 MONTH) duetodate

4、上周四到本周三

有时候不是按照自然周进行统计的,需要自定义一周的起止日期,可以按照下面的方式:

SELECT ADDDATE(DATE_SUB(CURDATE(),INTERVAL (IF(WEEKDAY(CURDATE())IN(3,4,5,6),WEEKDAY(CURDATE()),WEEKDAY(CURDATE())+7 )) + 1 DAY),-3) startdate
, ADDDATE(DATE_SUB(CURDATE(),INTERVAL (IF(WEEKDAY(CURDATE())IN(3,4,5,6),WEEKDAY(CURDATE()),WEEKDAY(CURDATE())+7 )) + 1 DAY),3)duetodate

OK,至此就可以实现时间、日期的信息提取、任意区间的截取了~

总结

以上所述是小编给大家介绍的Mysql指定日期区间的提取方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • mysql执行时间为负数的原因分析

    mysql执行时间为负数的原因分析

    今天看到有人把phpmyadmin中的执行时间出现负数的情况视为phpmyadmin的bug, 其实这种情况的本质是php中浮点数(float)的精度问题。
    2010-08-08
  • MySQL数据库varchar的限制规则说明

    MySQL数据库varchar的限制规则说明

    本文我们主要介绍了MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,希望能够对您有所帮助。
    2011-08-08
  • mysql排序ORDER BY不生效的问题解决

    mysql排序ORDER BY不生效的问题解决

    order by作为一个常用的功能,在项目中应该经常用到,本文主要介绍了mysql排序ORDER BY不生效的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • mysql同步问题之Slave延迟很大优化方法

    mysql同步问题之Slave延迟很大优化方法

    这篇文章主要介绍了mysql同步问题之Slave延迟很大优化方法,需要的朋友可以参考下
    2016-05-05
  • mysql 5.7.12 winx64安装配置方法图文教程

    mysql 5.7.12 winx64安装配置方法图文教程

    这篇文章主要为大家分享了mysql 5.7.12winx64安装配置方法图文教程,感兴趣的朋友可以参考一下
    2016-05-05
  • SQL 语句优化方法30例

    SQL 语句优化方法30例

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法.
    2009-10-10
  • SQL PRIMARY KEY唯一标识表中记录的关键约束语句

    SQL PRIMARY KEY唯一标识表中记录的关键约束语句

    这篇文章主要为大家介绍了SQL PRIMARY KEY唯一标识表中记录的关键约束语句详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • MySQL 数据库铁律(小结)

    MySQL 数据库铁律(小结)

    这篇文章主要介绍了MySQL 数据库铁律,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • MySQL优化之分区表

    MySQL优化之分区表

    这篇文章主要介绍了MySQL优化之分区表,需要的朋友可以参考下
    2016-06-06
  • Mysql 安装及my.ini的创建过程

    Mysql 安装及my.ini的创建过程

    这篇文章主要介绍了Mysql 安装及my.ini的创建过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论