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指定日期区间的提取方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Mysql中实现提取字符串中的数字的自定义函数分享

    因需要在mysql的数据表中某一字符串中的字段提取出数字,在网上找了一通,终于找到了一个可用的mysql函数,可以有效的从字符串中提取出数字. 该mysql提取出字符串中的数字函数如下: 复制代码 代码如下: CREATE FUNCTION GetNum (Varstring varchar(50)) RETURNS varchar(30) BEGIN DECLARE v_length INT DEFAULT 0; DECLARE v_Tmp varchar(50) default ''; se

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

    在数据库搬砖的过程中,免不了要跟日期打交道,比如按日期汇总一些指标.统计某段时间内的总量等. 如果是固定的日期还好,只需直接指定即可,但很多时候都是需要根据当前日期自适应变化的.比如:提取上周一到上周日的数据.提取上个月的数据.提取前N个月的数据... 这些要求都有一个共同点,就是要视当前日期而定!那么,我们就需要首先获取当前日期的一些信息,如当前日期是本周第几天.本月第几天等,然后,才能做下一步处理. 一.在提取所需日期区间之前,我们先介绍几个常用的函数 -- 先运行这一句 SET @t =

  • Mysql查询时间区间日期列表实例代码

    目录 1.查询时间区间日期列表,不会由于数据表数据影响 2.创建视图可以公共使用 3.创建为视图之后,可以通过视图查询时间区间列表日期 4.查询时间区间按月 附:在对mysql的时间进行区间查询的时候出现的问题 总结 1.查询时间区间日期列表,不会由于数据表数据影响 select a.date from ( select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as date from (

  • php日期转时间戳,指定日期转换成时间戳

    写过PHP+MySQL的程序员都知道有时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储.处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以有的时候需要互相转换,下面给出互相转换的几种转换方式. 一.在MySQL中完成 这种方式在MySQL查询语句中转换,优点是不占用PHP解析器的解析时间,速度快,缺点是只能用在数据库查询中,有局限性. 1. UNIX时间戳转换为日期用函数: FROM_UNIXTIME() 一般形式:selec

  • PHP获取指定日期是星期几的实现方法

    本文实例讲述了PHP获取指定日期是星期几的实现方法.分享给大家供大家参考,具体如下: <?php header("Content-type: text/html; charset=utf-8"); //获取星期方法 function get_week($date){ //强制转换日期格式 $date_str=date('Y-m-d',strtotime($date)); //封装成数组 $arr=explode("-", $date_str); //参数赋值

  • mysql常用日期时间/数值函数详解(必看)

    1.日期时间函数 时间转化秒函数:time_to_sec MySQL> select time_to_sec('01:01:01'); +-------------------------+ | time_to_sec('01:01:01') | +-------------------------+ | 3661 | +-------------------------+ 1 row in set (0.00 sec) 秒转化时间函数:sec_to_time mysql> select se

  • Mysql中日期和时间函数应用不用求人

    对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型. 这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, --7=星期六).这些索引值对应于ODBC标准.

  • python+pandas生成指定日期和重采样的方法

    python 日期的范围.频率.重采样以及频率转换 pandas有一整套的标准时间序列频率以及用于重采样.频率推断.生成固定频率日期范围的工具. 生成指定日期范围的范围 pandas.date_range()用于生成指定长度的DatatimeIndex: 1)默认情况下,date_range会按着时间间隔为天的方式生成从给定开始到结束时间的时间戳数组: 2)如果只指定开始或结束时间,还需要periods标定时间长度. import pandas as pd pd.date_range('2017

  • mysql函数日期和时间函数汇总

    目录 前言 获取当前日期的函数 获取当前时间的函数 获取当前日期和时间的函数 UNIX时间戳函数 返回UTC日期的函数 返回UTC时间的函数 获取月份的函数MONTH(date)和MONTHNAME(date) 获取星期的函数DAYNAME(d).DAYOFWEEK(d)和WEEKDAY(d) 获取星期的函数WEEK(d)和WEEKOFYEAR(d) 获取天数的函数DAYOFYEAR(d)和DAYOFMONTH(d) 获取年份.季度.小时.分钟和秒钟的函数 获取日期的指定值的函数EXTRACT(

  • 解决MySQL时区日期时差8个小时的问题

    目录 场景: 解决: mysql查出时间相差14小时 问题重现 问题排查 场景: 我们在mysql客户端查询 now() 系统当前日期时间,会发现得到的结果比系统实际日期时间慢8个小时左右,这是由于不同的时区导致的 解决: 1.在 mysql 的服务端的 my.conf 文件中 [mysqld] 节点下设置时区参数 default-time-zone=Asia/Shanghai 2.如果 mysql 的版本是 5.7 配置如下参数 default-time-zone = '+8:00' 3.如果

  • 用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件

    核心代码: @echo off :: by oicu#lsxk.org :: 15:17 2011-1-13 :: 如果只是删除指定日期或N天前修改的文件,用forfiles即可 FORFILES /P "C:\测试目录" /S /M *.log /D -3 /C "cmd /c if @isdir==FALSE echo del @file" :: 指定日期(包含)前修改的文件:/D -yyyy/mm/dd :: 以下是流水账 :: 使用限制:控制面板里设定日期格

随机推荐