• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
auqsio7413820 显示全部楼层 发表于 2021-10-26 13:08:19 |阅读模式 打印 上一主题 下一主题
在数据库搬砖的过程中,免不了要跟日期打交道,比如按日期汇总一些指标、统计某段时间内的总量等。
如果是固定的日期还好,只需直接指定即可,但很多时间都是须要根据当前日期自适应厘革的。比如:提取上周一到上周日的数据、提取上个月的数据、提取前N个月的数据。。。
这些要求都有一个共同点,就是要视当前日期而定!那么,我们就须要首先获取当前日期的一些信息,如当前日期是本周第几天、本月第几天等,然后,才能做下一步处理。
一、在提取所需日期区间之前,我们先先容几个常用的函数
  1. -- 先运行这一句
  2. SET @t = '2018-07-26 11:41:29';
  3. -- 再运行这一句
  4. SELECT DATE(@t)当前日期,YEAR(@t) 年份, MONTH(@t)月份,WEEK(@t)本年第几周, DAY(@t) 本月第几天,
  5. HOUR(@t)小时, MINUTE(@t)分钟, SECOND(@t)秒
复制代码
运行出来,结果是这样的:

二、下面先容几个常用的日期加减运算函数
1、ADDDATE(expr, days) / SUBDATE(expr, days):
ADDDAT函数有两个形参,第一个是基准日期,也即须要运算的日期;第二个是一个隔断表达式,形如:INTERVAL 1 HOUR,其中INTERVAL 是隔断的意思,中心的数字1可以换成恣意整数,第三个hour可以更换成day/month/year等时间单元。
SUBDATE同理,只不外变成了减法运算。
完整的用法如下:
  1. SELECT ADDDATE('2018-07-26 11:41:29',INTERVAL 1 HOUR);
  2. SELECT SUBDATE('2018-07-26 11:41:29',INTERVAL 1 HOUR);
复制代码
2、DATE_ADD() / DATE_SUB():
用法同ADDDATE(expr, days) / SUBDATE(expr, days)。
三、日期区间截取
接下来,使用上面先容的日期函数的用法,就可以举行日期区间的截取了。
1、上周
  1. -- 提取上周的日期区间
  2. SELECT CURDATE() NOW,
  3. ADDDATE(ADDDATE(DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) + 1 DAY),-6),0) startdate,
  4. ADDDATE(DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) + 1 DAY),0) duetodate
复制代码
2、上月
  1. -- 上月
  2. SELECT CURDATE() NOW,
  3. DATE_ADD(DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE())+1 DAY), INTERVAL -1 MONTH) startdate,
  4. DATE_ADD(DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE()) DAY), INTERVAL 0 MONTH) duetodate
复制代码
3、前四个月
  1. -- 前四个月
  2. SELECT CURDATE() NOW,
  3. ADDDATE(ADDDATE(CURDATE(),INTERVAL -DAY(CURDATE())+1 DAY), INTERVAL -4 MONTH) startdate,
  4. DATE_ADD(DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE()) DAY), INTERVAL 0 MONTH) duetodate
复制代码
4、上周四到本周三
有时间不是按照自然周举行统计的,须要自界说一周的起止日期,可以按照下面的方式:
  1. SELECT ADDDATE(DATE_SUB(CURDATE(),INTERVAL (IF(WEEKDAY(CURDATE())IN(3,4,5,6),WEEKDAY(CURDATE()),WEEKDAY(CURDATE())+7 )) + 1 DAY),-3) startdate
  2. , ADDDATE(DATE_SUB(CURDATE(),INTERVAL (IF(WEEKDAY(CURDATE())IN(3,4,5,6),WEEKDAY(CURDATE()),WEEKDAY(CURDATE())+7 )) + 1 DAY),3)duetodate
复制代码
OK,至此就可以实现时间、日期的信息提取、恣意区间的截取了~

总结
以上所述是小编给各人先容的Mysql指定日期区间的提取方法,渴望对各人有所资助,如果各人有任何疑问请给我留言,小编会及时回复各人的。在此也非常感谢各人对草根技术分享网站的支持!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作