一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解

目录

前言

一、INTERVAL

1.基础使用

 2.在函数中使用

二、INTERVAL()函数

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢



前言

时间在数据库中经常作为时间索引,在数据入库和出库以及更新的时候都需要变化。在一些指标计算或者是提取某段时间的数据时,都会根据数据库中的时间索引数据进行操作。因此很大一部分我们操作数据都得先从时间数据下手,但是想要真正提取到我们想要的时间作为索引,还需要我们掌握许多功能函数方便我们操作,这是一个比较复杂的运用过程。

在本人博客数据库MySQL已有三篇详细解释了大部分关于处理时间数据的函数以及实例运用,如果对这一方面有需求的可以看这两篇:

一文速学-玩转MySQL获取时间、格式转换各类操作方法详解

一文速学-玩转MySQL时间选取各类函数操作详解+实例代码

第一篇具体讲述了所有获取SQL本地时间的函数,以及其他数据类型与时间数据类型相互转换。

第二批具体讲述了所有MySQL时间数据选取具体指定时间的函数。以上两篇文章都有具体的代码演示。希望能够帮助到正在看此博文的各位,如果还有什么问题解决不了尽请在评论区提出,博主会一一作答。下面开始正文。


一、INTERVAL

1.基础使用

INTERVAL关键字一般使用格式为:

interval [+/-]<数值> <时间单位>

 例如:

interval 3 day

代表意义为3天的时间变量,可由时间变量进行相加减。这里展示SQL表为:

 例如我们想要将create_time推迟三天:

select (create_time-INTERVAL 3 day) as time  from value_test

 也可以为-3天:

select (create_time+INTERVAL -3 day) as time  from value_test

 效果是一样的。

时间单位表为:

时间单位 描述
year
quarter 季度
month
week
day
hour 小时
minute 分钟
second
microsecond 微秒

second_microsecond

秒_微秒
minute_microsecond 分_微秒
minute_second 分_秒
hour_microsecond 时_微秒
hour_second 时_秒
hour_minute 时_分
day_microsecond 天_微秒
day_second 天_秒
day_minute 天_分钟
day_hour 天_小时
year_month 年_月

如果我们想要在原基础上加上1小时10分钟10秒:

select (create_time+INTERVAL '1:10:10' hour_second) as time  from value_test

 这里要注意一下指定的时间单位向下兼容性,当我们选择的是hour_second小时到秒时,输入的数值仅为两个数值,例如:

select (create_time+INTERVAL '10:10' hour_second) as time  from value_test

会自动识别为10分10秒:

 其他的连续时间段表示单位也都一样,例如:

select (create_time+INTERVAL '10:10:10' day_second) as time  from value_test

 

 2.在函数中使用

interval一般使用场景都在场景筛选中使用,比如where的条件判断,或者是筛选、去一段指定的时间片段。如取近七日的时间段的数据:

and time between  cast(date_sub(date_format(curdate(),'%Y%m%d') 
, interval 7 day) as DECIMAL) 
and  cast(date_sub(date_format(curdate(),'%Y%m%d') , interval 1 day) 
as DECIMAL)

也经常在date_add和date_sub这种时间运算函数中表示时间变量使用,add和sub都可以通过修改正负号来替换功能。

二、INTERVAL()函数

在MySQL输入interval()函数就会显示相应的语法格式:

 

INTERVAL(N,N1,N2,N3,...)

 INTERVAL()函数为分区函数,其中,N是要判断的数值,N1,N2,N3,...是分段的间隔。

这个函数的返回值是段的位置:

  • 如果N<N1,则返回0,
  • 如果N1<=N<N2,则返回1,
  • 如果N2<=N<N3,则返回2。
  • 区间是左闭右开的。

这里我们用time这一列开展示效果:

我们想要把time列的时间归类为20220601-20220610为一个区域,20220611-20220620为一个区域,20220621-20220630为一个区域,每隔10天为一个分区。

select INTERVAL(time,20220611,20220621,20220631) as time  from value_test

 分完区之后一般进行统计,就可以得到对应区间的个数了:

select INTERVAL(time,20220611,20220621,20220631) as times ,count(*) as count 
from value_test
GROUP BY times

 


点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

猜你喜欢

转载自blog.csdn.net/master_hunter/article/details/125367418