视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Mysql指定日期区间的提取方法
2020-11-09 20:24:36 责编:小采
文档


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

如果是固定的日期还好,只需直接指定即可,但很多时候都是需要根据当前日期自适应变化的。比如:提取上周一到上周日的数据、提取上个月的数据、提取前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中实现提取字符串中的数字的自定义函数分享
  • 下载本文
    显示全文
    专题