mysql通过时间间隔获取数据

这个问题也是老生常谈。在实际的开发中,也不大会实际用到。一般都会结合子自己使用的编程语言来结合做。这样可以减轻数据库的很多压力,代码也好维护。为什么还要说这些呢!一般也就是面试可能会用到。哈哈哈!

最近google了下,发现很多博文中并没考虑到跨年的问题,或者说没有详细的介绍,于是我就想写一下,可以让大家有更多的参考。

我们今天就用MySQL 函数来实现:

  1. last_day
    概念
    需要一个日期或日期时间值,并返回该月的最后一天对应的值。 如果该参数是无效的,则返回NULL。
mysql> SELECT LAST_DAY('2019-01-04');
+------------------------+
| LAST_DAY('2019-01-04') |
+------------------------+
| 2019-01-31             |
+------------------------+
1 row in set (0.00 sec)
  1. date_add和date_sub
    **概念:
    mysql中内置函数date_add和date_sub能对指定的时间进行增加或减少一个指定的时间间隔,语法如下:

    DATE_ADD(date,INTERVAL expr type)
    DATE_SUB(date,INTERVAL expr type)
    其中date是指定的日期,INTERVAL为关键词,expr是具体的时间间隔,type是时间单位。注意:type可以复合型的,比如 YEAR_MONTH。如果type不是复合型的,DATE_ADD和DATE_SUB其实可以通用,因为expr可以为一个负数。可用的type如下 表:

    MICROSECOND 间隔单位:毫秒
    SECOND 间隔单位:秒
    MINUTE 间隔单位:分钟
    HOUR 间隔单位:小时
    DAY 间隔单位:天
    WEEK 间隔单位:星期
    MONTH 间隔单位:月
    QUARTER 间隔单位:季度
    YEAR 间隔单位:年
    SECOND_MICROSECOND 复合型,间隔单位:秒、毫秒,expr可以用两个值来分别指定秒和毫秒
    MINUTE_MICROSECOND 复合型,间隔单位:分、毫秒
    MINUTE_SECOND 复合型,间隔单位:分、秒
    HOUR_MICROSECOND 复合型,间隔单位:小时、毫秒
    HOUR_SECOND 复合型,间隔单位:小时、秒
    HOUR_MINUTE 复合型,间隔单位:小时分
    DAY_MICROSECOND 复合型,间隔单位:天、毫秒
    DAY_SECOND 复合型,间隔单位:天、秒
    DAY_MINUTE 复合型,间隔单位:天、分
    DAY_HOUR 复合型,间隔单位:天、小时
    YEAR_MONTH 复合型,间隔单位:年、月**

mysql> select date_add('2019-01-04', interval '1' MONTH);
+--------------------------------------------+
| date_add('2019-01-04', interval '1' MONTH) |
+--------------------------------------------+
| 2019-02-04                                 |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select date_sub('2019-01-04', interval '1' MONTH);
+--------------------------------------------+
| date_sub('2019-01-04', interval '1' MONTH) |
+--------------------------------------------+
| 2018-12-04                                 |
+--------------------------------------------+
1 row in set (0.01 sec)

  1. day 获取天数
mysql> SELECT DAY(curdate());
    +----------------+
    | DAY(curdate()) |
    +----------------+
    |              4 |
    +----------------+
    1 row in set (0.00 sec)
  1. interval
特别注意
1、 在date_sub和date_add中interval 是指时间的间隔。间隔一月、一天等,看上面的例子。
2、interval 函数是一个对比函数,看定义:
INTERVAL(N,N1,N2,N3,..........)
INTERVAL()函数进行比较列表(N1,N2,N3等等)中的N值。
该函数如果N<N1返回0,如果N<N2返回1,如果N<N3返回2 等等。
如果N为NULL,它将返回-1。
列表值必须是N1<N2<N3的形式才能正常工作。也就是说必须从小到大比较,否则为0.后面就停止比较。

mysql> SELECT interval(10,3,5,7,99);
+-----------------------+
| interval(10,3,5,7,99) |
+-----------------------+
|                     3 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT interval(10,3,55,7);
+---------------------+
| interval(10,3,55,7) |
+---------------------+
|                   1 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT interval(10,33,1);
+-------------------+
| interval(10,33,1) |
+-------------------+
|                 0 |
+-------------------+
1 row in set (0.00 sec)

实例:获取上个月的数据

select order_id,FROM_UNIXTIME(order_c_time,'%Y%m%d'),
MONTH(FROM_UNIXTIME(order_c_time,'%Y%m%d')),
day(curdate())+1, curdate()-day(curdate())+1,
date_add(curdate()-day(curdate())+1,interval -1 month),
last_day(date_sub(now(),interval 0 month))from doub_order
where FROM_UNIXTIME(order_c_time,'%Y-%m-%d') >= date_add(curdate()-day(curdate())+1,interval -1 month) AND  FROM_UNIXTIME(order_c_time,'%Y-%m-%d') <=last_day(date_sub(now(),interval 1 month)) order by order_id DESC limit 0,10000

在这里插入图片描述

其他的例子我就不说了思路一样的。谢谢大家!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值