当前位置: 首页 > 编程笔记 >

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

陆子默
2023-03-14
本文向大家介绍Mysql指定日期区间的提取方法,包括了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指定日期区间的提取方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 问题内容: 是否可以指定log4j将使用的时区?我需要日志文件中的日期与应用程序的日期不同。log4j的使用。不幸的是,似乎没有一种通过模式字符串来控制时区的方法(有方法,但这无济于事)。 我查看了log4j的来源,并在中对其进行了实例化。不幸的是,没有一个简单的方法可以控制时区。 问题答案: 如果在类路径上使用Log4J extras JAR文件,则EnhancedPatternLayout类支

  • 问题内容: 已修正-这是我现在所拥有的 -用ASP编写 原始问题: 简单的问题,但由于某种原因,我似乎无法正常工作。 我有一个搜索框,旁边是日期范围选择菜单,因此用户可以搜索最近1个月,6个月或12个月内的照片。 我所拥有的没有错误,但是当它应该执行时它不会产生任何结果,就是这样: SQL输出产生以下结果: 数据库的’dateCreated’字段设置为(Date INDEX)。 谁能看到哪里出了问

  • 本文向大家介绍Mysql获取当前日期的前几天日期的方法,包括了Mysql获取当前日期的前几天日期的方法的使用技巧和注意事项,需要的朋友参考一下 如:获得 2015-03-01 日的前7天的日期 : 输出: 2015-02-22

  • 然后将变量持久化到MySQL表列中。 然而,虽然通过调试,我看到对象显示在正确的时区GMT+1,但在数据库上持久化时,它是一个GMT时区,所以要追溯一个小时。 使用函数返回一个GMT+1日期。 连接字符串为,没有任何参数。 编辑:找到这段代码

  • 问题内容: 如果我在两个文本框中有两个日期20-4-2010和22-4-2010,并且我希望日期像这样的20、21、22,我该如何得到? 问题答案: 我很确定这已经回答了四千万次,但是无论如何: 该部分是为了防止代码跳过或者一天重复由于夏令时。 通过给出天数: 使用PHP5.3

  • 问题内容: 如何找出上一个(上一个)“星期五”或指定日期之后的其他日期的日期? 问题答案: 我不会给出答案(请先尝试一下!),但是,也许这些技巧可以为您提供帮助。 您首先需要确定您所在的星期几。您可能想看一下Java的Calendar类,以了解如何做到这一点。 确定日期后,请考虑模数运算符以及如何使用该运算符向后移动以从当前所在的日期开始寻找所需的前一天。(请记住,一周是7天,一周中的每一天在这7