Mysql的INTERVAL()函数和INTERVAL关键字
一,INTERVAL()函数
INTERVAL()函数可以返回分段后的结果,语法如下:
INTERVAL(N,N1,N2,N3,..........)
其中,N是要判断的数值,N1,N2,N3,...是分段的间隔。
这个函数的返回值是段的位置:
如果N<N1,则返回0,
如果N1<=N<N2,则返回1,
如果N2<=N<N3,则返回2。
所以,区间是前闭后开的。
举个例子:
有这样的数据:
然后执行以下sql:
SELECT id,percent,INTERVAL(percent,25,50) from test;
执行结果如下:
意思大概是这样的:percent字段参与判断,设定的区段是25,50,那么小于25的值返回0,大于等于25小于50的值返回1,大于等于50的值返回2。
还可以把INTERVAL()函数用在GROUP BY中:
执行这样的sql:
SELECT
INTERVAL (percent, 0, 26, 51),
COUNT(1)
FROM
test
GROUP BY
INTERVAL (percent, 0, 26, 51);
执行结果如下:
二,INTERVAL关键字
INTERVAL关键字可以用于计算时间间隔,可以有以下用法。
1,直接计算时间间隔。
例1:查询当前时间之前2个小时的日期:
SELECT NOW()-INTERVAL '2' HOUR;
例2:
有这样的表:
执行这样的sql:
SELECT
id,
percent,
t_date,
t_date - INTERVAL 2 HOUR
FROM
test
where t_date - INTERVAL 2 HOUR>'2020-11-02';
执行结果:
注:INTERVAL后面的数字可以用数字格式或者字符格式,当时间单位是YEAR_MONTH这种时,必须用字符格式。
2,用在时间函数中
INTERVAL关键字可以用在DATE_SUB(),SUBDATE(),ADDDATE()等函数中。
例1:查询两天前的时间:
SELECT NOW(),SUBDATE(NOW(),INTERVAL 2 DAY);
例2:执行这样的sql:
SELECT
id,
percent,
t_date,
DATE_SUB(t_date, INTERVAL 2 HOUR)
FROM
test
WHERE
DATE_SUB(t_date, INTERVAL 2 HOUR) > '2020-11-02';
执行结果:
可用的时间单位:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
重点关注一下YEAR_MONTH这种格式的单位,以YEAR_MONTH为例,代表几年又几个月的时间间隔。
比如查询当前时间前一年又三个月的时间,可以这样:
SELECT NOW(),NOW()-INTERVAL '1 3' YEAR_MONTH;
执行结果:
其中:
'1 3' YEAR_MONTH的配置就是代表1年3个月,两个数字之间的间隔符用等号,空格,下划线,中划线等等的都可以。
同理,'2 1 3 4' DAY_SECOND就代表2天1小时3分4秒:
另外,在Oracle中,INTERVAL关键字还有专门的语法,可以起到MySQL中YEAR_MONTH关键字差不多的功能:
INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]
原文链接:https://blog.csdn.net/lkforce/article/details/109537645