目录
前言
一、INTERVAL
1.基础使用
2.在函数中使用
二、INTERVAL()函数
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
时间在数据库中经常作为时间索引,在数据入库和出库以及更新的时候都需要变化。在一些指标计算或者是提取某段时间的数据时,都会根据数据库中的时间索引数据进行操作。因此很大一部分我们操作数据都得先从时间数据下手,但是想要真正提取到我们想要的时间作为索引,还需要我们掌握许多功能函数方便我们操作,这是一个比较复杂的运用过程。
在本人博客数据库MySQL已有三篇详细解释了大部分关于处理时间数据的函数以及实例运用,如果对这一方面有需求的可以看这两篇:
一文速学-玩转MySQL获取时间、格式转换各类操作方法详解
一文速学-玩转MySQL时间选取各类函数操作详解+实例代码
第一篇具体讲述了所有获取SQL本地时间的函数,以及其他数据类型与时间数据类型相互转换。
第二批具体讲述了所有MySQL时间数据选取具体指定时间的函数。以上两篇文章都有具体的代码演示。希望能够帮助到正在看此博文的各位,如果还有什么问题解决不了尽请在评论区提出,博主会一一作答。下面开始正文。
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
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都可以通过修改正负号来替换功能。
在MySQL输入interval()函数就会显示相应的语法格式:
INTERVAL(N,N1,N2,N3,...)
INTERVAL()函数为分区函数,其中,N是要判断的数值,N1,N2,N3,...是分段的间隔。
这个函数的返回值是段的位置:
这里我们用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 ,有问题大家随时留言讨论 ,我们下期见。